diff options
Diffstat (limited to 'src/xfpm-settings.c')
-rw-r--r-- | src/xfpm-settings.c | 1332 |
1 files changed, 1332 insertions, 0 deletions
diff --git a/src/xfpm-settings.c b/src/xfpm-settings.c new file mode 100644 index 00000000..5d62bba9 --- /dev/null +++ b/src/xfpm-settings.c @@ -0,0 +1,1332 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- + * + * * Copyright (C) 2008 Ali <aliov@xfce.org> + * + * Licensed under the GNU General Public License Version 2 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdio.h> + +#ifdef HAVE_STDLIB_H +#include <stdlib.h> +#endif + +#ifdef HAVE_STRING_H +#include <string.h> +#endif + +#ifdef HAVE_ERRNO_H +#include <errno.h> +#endif + +#include <gtk/gtk.h> + +#include <xfconf/xfconf.h> +#include <libxfce4util/libxfce4util.h> +#include <libxfcegui4/libxfcegui4.h> + +#include "xfpm-settings.h" +#include "xfpm-enums.h" +#include "xfpm-common.h" +#include "xfpm-spin-button.h" + +#ifdef HAVE_DPMS +#include "xfpm-dpms-spins.h" +#endif + +#define BORDER 8 +#define SPACING 2 + +/// Global Variable /// +static GtkWidget *nt; + +static GtkWidget *cpu_gov; +static GtkWidget *performance_on_ac; +static GtkWidget *ondemand_on_ac; +static GtkWidget *powersave_on_ac; +static GtkWidget *conservative_on_ac; + +static GtkWidget *performance_on_batt; +static GtkWidget *ondemand_on_batt; +static GtkWidget *powersave_on_batt; +static GtkWidget *conservative_on_batt; + +#ifdef HAVE_DPMS +static GtkWidget *dpms_op; +static GtkWidget *on_batt_dpms; +static GtkWidget *on_ac_dpms; +#endif + +/// Callback Setting Functions /// +static void +set_show_tray_icon_cb(GtkWidget *widget,XfconfChannel *channel) +{ + gboolean value = gtk_combo_box_get_active(GTK_COMBO_BOX(widget)); + + if(!xfconf_channel_set_uint(channel,SHOW_TRAY_ICON_CFG,value)) + { + g_critical("Cannot set value %s\n",SHOW_TRAY_ICON_CFG); + } +} + +static void +set_battery_critical_charge_cb(GtkWidget *widget,XfconfChannel *channel) +{ + guint value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget)); + + if(!xfconf_channel_set_uint(channel,CRITICAL_BATT_CFG,value)) + { + g_critical("Cannot set value %s\n",CRITICAL_BATT_CFG); + } +} + +static void +set_critical_action_cb(GtkWidget *widget,XfconfChannel *channel) +{ + guint value = gtk_combo_box_get_active(GTK_COMBO_BOX(widget)); + + if(!xfconf_channel_set_uint(channel,CRITICAL_BATT_ACTION_CFG,value)) + { + g_critical("Cannot set value %s\n",CRITICAL_BATT_ACTION_CFG); + } +} + +static void +set_power_button_action_cb(GtkWidget *widget,XfconfChannel *channel) +{ + guint value = gtk_combo_box_get_active(GTK_COMBO_BOX(widget)); + + if(!xfconf_channel_set_uint(channel,POWER_SWITCH_CFG,value)) + { + g_critical("Cannot set value %s\n",POWER_SWITCH_CFG); + } +} + +static void +set_sleep_button_action_cb(GtkWidget *widget,XfconfChannel *channel) +{ + guint value = gtk_combo_box_get_active(GTK_COMBO_BOX(widget)); + + if(!xfconf_channel_set_uint(channel,SLEEP_SWITCH_CFG,value)) + { + g_critical("Cannot set value %s\n",SLEEP_SWITCH_CFG); + } +} + +static void +set_lid_button_action_cb(GtkWidget *widget,XfconfChannel *channel) +{ + guint value = gtk_combo_box_get_active(GTK_COMBO_BOX(widget)); + + if(!xfconf_channel_set_uint(channel,LID_SWITCH_CFG,value)) + { + g_critical("Cannot set value %s\n",LID_SWITCH_CFG); + } +} + +static void +set_power_save_cb(GtkWidget *widget,XfconfChannel *channel) +{ + gboolean value = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); + + if(!xfconf_channel_set_bool(channel,POWER_SAVE_CFG,value)) + { + g_critical("Cannot set value %s\n",POWER_SAVE_CFG); + } +} + +#ifdef HAVE_LIBNOTIFY +static void +set_battery_state_notification_cb(GtkWidget *widget,XfconfChannel *channel) +{ + gboolean value = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); + + if(!xfconf_channel_set_bool(channel,BATT_STATE_NOTIFICATION_CFG,value)) + { + g_critical("Cannot set value %s\n",BATT_STATE_NOTIFICATION_CFG); + } +} +#endif + +static void +set_lcd_brightness_cb(GtkWidget *widget,XfconfChannel *channel) +{ + gboolean value = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); + + if(!xfconf_channel_set_bool(channel,LCD_BRIGHTNESS_CFG,value)) + { + g_critical("Cannot set value %s\n",LCD_BRIGHTNESS_CFG); + } +} + +#ifdef HAVE_DPMS +static void +set_dpms_cb(GtkWidget *widget,XfconfChannel *channel) +{ + gboolean value = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); + + if(!xfconf_channel_set_bool(channel,DPMS_ENABLE_CFG,value)) + { + g_critical("Cannot set value %s\n",DPMS_ENABLE_CFG); + } + + xfpm_dpms_spins_set_active(XFPM_DPMS_SPINS(on_ac_dpms),value); + + if ( GTK_IS_WIDGET(on_batt_dpms) ) + { + xfpm_dpms_spins_set_active(XFPM_DPMS_SPINS(on_batt_dpms),value); + } +} + +static void +set_dpms_on_battery_cb(GtkWidget *spin,guint value1,guint value2, + guint value3,XfconfChannel *channel) +{ + GPtrArray *arr = g_ptr_array_sized_new(3); + GValue *val; + + val = g_new0(GValue, 1); + g_value_init(val, G_TYPE_UINT); + g_value_set_uint(val, value1); + g_ptr_array_add(arr, val); + + val = g_new0(GValue, 1); + g_value_init(val, G_TYPE_UINT); + g_value_set_uint(val, value2); + g_ptr_array_add(arr, val); + + val = g_new0(GValue, 1); + g_value_init(val, G_TYPE_UINT); + g_value_set_uint(val, value3); + g_ptr_array_add(arr, val); + + if (!xfconf_channel_set_arrayv(channel, + ON_BATT_DPMS_TIMEOUTS_CFG, + arr) ) + { + g_critical("Cannot set value for %s \n",ON_BATT_DPMS_TIMEOUTS_CFG); + xfconf_array_free(arr); + return; + } + xfconf_array_free(arr); +} + +static void +set_dpms_on_ac_cb(GtkWidget *spin,guint value1,guint value2, + guint value3,XfconfChannel *channel) +{ + GPtrArray *arr = g_ptr_array_sized_new(3); + GValue *val; + + val = g_new0(GValue, 1); + g_value_init(val, G_TYPE_UINT); + g_value_set_uint(val, value1); + g_ptr_array_add(arr, val); + + val = g_new0(GValue, 1); + g_value_init(val, G_TYPE_UINT); + g_value_set_uint(val, value2); + g_ptr_array_add(arr, val); + + val = g_new0(GValue, 1); + g_value_init(val, G_TYPE_UINT); + g_value_set_uint(val, value3); + g_ptr_array_add(arr, val); + + if (!xfconf_channel_set_arrayv(channel, + ON_AC_DPMS_TIMEOUTS_CFG, + arr) ) + { + g_critical("Cannot set value %s \n",ON_AC_DPMS_TIMEOUTS_CFG); + xfconf_array_free(arr); + return; + } + xfconf_array_free(arr); +} +#endif + +static void +set_cpu_freq_scaling_cb(GtkWidget *widget,XfconfChannel *channel) +{ + gboolean value = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); + + if(!xfconf_channel_set_bool(channel,CPU_FREQ_SCALING_CFG,value)) + { + g_critical("Cannot set value %s\n",CPU_FREQ_SCALING_CFG); + } + if ( GTK_IS_WIDGET(ondemand_on_ac) ) + { + gtk_widget_set_sensitive(ondemand_on_ac,value); + gtk_widget_set_sensitive(performance_on_ac,value); + gtk_widget_set_sensitive(powersave_on_ac,value); + gtk_widget_set_sensitive(conservative_on_ac,value); + } + + if ( GTK_IS_WIDGET(ondemand_on_batt) ) /* enough to check only one widget */ + { + gtk_widget_set_sensitive(ondemand_on_batt,value); + gtk_widget_set_sensitive(performance_on_batt,value); + gtk_widget_set_sensitive(powersave_on_batt,value); + gtk_widget_set_sensitive(conservative_on_batt,value); + } +} + +static void +set_powersave_on_ac_cb(GtkWidget *widget,XfconfChannel *channel) +{ + if(!xfconf_channel_set_uint(channel,ON_AC_CPU_GOV_CFG,POWERSAVE)) + { + g_critical("Cannot set value %s\n",ON_AC_CPU_GOV_CFG); + } + +} + +static void +set_ondemand_on_ac_cb(GtkWidget *widget,XfconfChannel *channel) +{ + if(!xfconf_channel_set_uint(channel,ON_AC_CPU_GOV_CFG,ONDEMAND)) + { + g_critical("Cannot set value %s\n",ON_AC_CPU_GOV_CFG); + } + +} + +static void +set_performance_on_ac_cb(GtkWidget *widget,XfconfChannel *channel) +{ + if(!xfconf_channel_set_uint(channel,ON_AC_CPU_GOV_CFG,PERFORMANCE)) + { + g_critical("Cannot set value %s\n",ON_AC_CPU_GOV_CFG); + } + +} + +static void +set_conservative_on_ac_cb(GtkWidget *widget,XfconfChannel *channel) +{ + if(!xfconf_channel_set_uint(channel,ON_AC_CPU_GOV_CFG,CONSERVATIVE)) + { + g_critical("Cannot set value %s\n",ON_AC_CPU_GOV_CFG); + } + +} + +static void +set_powersave_on_batt_cb(GtkWidget *widget,XfconfChannel *channel) +{ + if(!xfconf_channel_set_uint(channel,ON_BATT_CPU_GOV_CFG,POWERSAVE)) + { + g_critical("Cannot set value %s\n",ON_BATT_CPU_GOV_CFG); + } + +} + +static void +set_ondemand_on_batt_cb(GtkWidget *widget,XfconfChannel *channel) +{ + if(!xfconf_channel_set_uint(channel,ON_BATT_CPU_GOV_CFG,ONDEMAND)) + { + g_critical("Cannot set value %s\n",ON_BATT_CPU_GOV_CFG); + } + +} + +static void +set_performance_on_batt_cb(GtkWidget *widget,XfconfChannel *channel) +{ + if(!xfconf_channel_set_uint(channel,ON_BATT_CPU_GOV_CFG,PERFORMANCE)) + { + g_critical("Cannot set value %s\n",ON_BATT_CPU_GOV_CFG); + } + +} + +static void +set_conservative_on_batt_cb(GtkWidget *widget,XfconfChannel *channel) +{ + if(!xfconf_channel_set_uint(channel,ON_BATT_CPU_GOV_CFG,CONSERVATIVE)) + { + g_critical("Cannot set value %s\n",ON_BATT_CPU_GOV_CFG); + } + +} + +/// End of Callback Setting Functions /// + +static XfpmActionRequest +_combo_helper_function(XfconfChannel *channel,const gchar *config, + guint8 power_management,XfpmActionRequest action) +{ + if( power_management == 0 && action != XFPM_DO_NOTHING ) + { + xfconf_channel_set_uint(channel,config,XFPM_DO_NOTHING); + return XFPM_DO_NOTHING; + } + + if( !(power_management & SYSTEM_CAN_SUSPEND) && action == XFPM_DO_SUSPEND ) + { + xfconf_channel_set_uint(channel,config,XFPM_DO_NOTHING); + return XFPM_DO_NOTHING; + } + + if( !(power_management & SYSTEM_CAN_HIBERNATE) && action == XFPM_DO_HIBERNATE ) + { + xfconf_channel_set_uint(channel,config,XFPM_DO_NOTHING); + return XFPM_DO_NOTHING; + } + + if ( action < XFPM_DO_NOTHING || action > XFPM_DO_SHUTDOWN ) + { + xfconf_channel_set_uint(channel,config,XFPM_DO_NOTHING); + return XFPM_DO_NOTHING; + } + return action; +} + +/// Settings frames /// +static GtkWidget * +xfpm_settings_battery(XfconfChannel *channel, guint8 power_management,gboolean ups_found) +{ + GtkWidget *table; + GtkWidget *frame,*align; + GtkWidget *label; + GtkWidget *critical_spin; + GtkWidget *action; + GtkWidget *w_align; + + table = gtk_table_new(4,2,FALSE); + gtk_widget_show(table); + frame = xfce_create_framebox(ups_found ? _("UPS configuration") :_("Battery configuration"), &align); + gtk_widget_show(frame); + gtk_container_set_border_width(GTK_CONTAINER(frame),BORDER); + + w_align = gtk_alignment_new (0.0, 0.5, 0, 0); + gtk_widget_show(w_align); + + label = gtk_label_new(ups_found ? _("Consider UPS charge critical"):_("Consider battery charge critical")); + gtk_widget_show(label); + gtk_container_add(GTK_CONTAINER(w_align), label); + gtk_table_attach(GTK_TABLE(table),w_align,0,1,0,1,GTK_FILL,GTK_FILL,BORDER,SPACING); + + critical_spin = xfpm_spin_button_new_with_range(1,20,1); + gchar *suffix = g_strdup_printf(" %s",_("percent")); + xfpm_spin_button_set_suffix(XFPM_SPIN_BUTTON(critical_spin),suffix); + g_free(suffix); + gtk_widget_show(critical_spin); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(critical_spin), + xfconf_channel_get_uint(channel,CRITICAL_BATT_CFG,10)); + g_signal_connect(critical_spin,"value-changed", + G_CALLBACK(set_battery_critical_charge_cb),channel); + gtk_table_attach(GTK_TABLE(table),critical_spin,1,2,0,1,GTK_FILL,GTK_FILL,BORDER,SPACING); + + label = gtk_label_new(_("When battery charge level is critical do")); + gtk_widget_show(label); + w_align = gtk_alignment_new (0.0, 0.5, 0, 0); + gtk_widget_show(w_align); + + gtk_container_add(GTK_CONTAINER(w_align), label); + if ( !ups_found ) + gtk_table_attach(GTK_TABLE(table),w_align,0,1,1,2,GTK_FILL,GTK_FILL,BORDER,SPACING); + + action = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(action),_("Nothing")); + if ( power_management != 0 ) + { + gtk_combo_box_append_text(GTK_COMBO_BOX(action),_("Shutdown")); + } + if ( power_management & SYSTEM_CAN_HIBERNATE ) + { + gtk_combo_box_append_text(GTK_COMBO_BOX(action),_("Hibernate")); + } + guint active = xfconf_channel_get_uint(channel,CRITICAL_BATT_ACTION_CFG,XFPM_DO_NOTHING); + active = _combo_helper_function(channel,CRITICAL_BATT_ACTION_CFG,power_management,active); + + gtk_combo_box_set_active(GTK_COMBO_BOX(action),active); + + gtk_widget_show(action); + g_signal_connect(action,"changed",G_CALLBACK(set_critical_action_cb),channel); + + !ups_found ? gtk_table_attach(GTK_TABLE(table),action,1,2,1,2,GTK_FILL,GTK_FILL,BORDER,SPACING) : gtk_widget_hide(action); + +#ifdef HAVE_LIBNOTIFY + GtkWidget *notify_bt; + notify_bt = gtk_check_button_new_with_label (ups_found ? _("Enable UPS charge notification") :_("Enable battery state notification") ); + gtk_widget_show(notify_bt); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(notify_bt), + xfconf_channel_get_bool(channel,BATT_STATE_NOTIFICATION_CFG,TRUE)); + g_signal_connect(notify_bt,"toggled",G_CALLBACK(set_battery_state_notification_cb),channel); + gtk_table_attach(GTK_TABLE(table),notify_bt,0,2,2,3,GTK_FILL,GTK_FILL,BORDER,SPACING); +#endif + if ( power_management & SYSTEM_CAN_POWER_SAVE ) + { + // Power Save Profile + GtkWidget *power_save; + power_save = gtk_check_button_new_with_label(ups_found ? _("Enable power save on UPS power") : _("Enable power save on battery power")); + gtk_widget_show(power_save); + + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(power_save), + power_management & SYSTEM_CAN_POWER_SAVE ? + xfconf_channel_get_bool(channel,POWER_SAVE_CFG,FALSE) + : FALSE); + + g_signal_connect(power_save,"toggled",G_CALLBACK(set_power_save_cb),channel); + gtk_table_attach(GTK_TABLE(table),power_save,0,2,2,3,GTK_SHRINK,GTK_SHRINK,SPACING, SPACING); + } + + gtk_container_add(GTK_CONTAINER(align),table); //vbox); + return frame; + +} + +static GtkWidget * +xfpm_settings_cpu_on_ac_adapter(XfconfChannel *channel,guint8 govs,const gchar *label) +{ + GtkWidget *frame; + GtkWidget *align; + GtkWidget *vbox; + + GSList *list; + guint current_governor = xfconf_channel_get_uint(channel,ON_AC_CPU_GOV_CFG,ONDEMAND); + gboolean enable = xfconf_channel_get_bool(channel,CPU_FREQ_SCALING_CFG,TRUE); + + frame = xfce_create_framebox(label, &align); + gtk_container_set_border_width(GTK_CONTAINER(frame),BORDER); + gtk_widget_show(frame); + + vbox = gtk_vbox_new(FALSE,BORDER); + gtk_widget_show(vbox); + gtk_container_add(GTK_CONTAINER(align),vbox); + + performance_on_ac = gtk_radio_button_new_with_label(NULL,_("Best performance")); + gtk_widget_set_tooltip_text(performance_on_ac,_("Set the CPU to its maximum frequency")); + gtk_box_pack_start (GTK_BOX (vbox), performance_on_ac, FALSE, FALSE, 0); + + list = gtk_radio_button_get_group(GTK_RADIO_BUTTON(performance_on_ac)); + + ondemand_on_ac = gtk_radio_button_new_with_label(list,_("Ondemand performance")); + gtk_widget_set_tooltip_text(ondemand_on_ac,_("Set the CPU to its maximum speed when there is any load on it "\ + "and to its minimum speed when the system is idle")); + gtk_box_pack_start (GTK_BOX (vbox), ondemand_on_ac, FALSE, FALSE, 0); + list = gtk_radio_button_get_group(GTK_RADIO_BUTTON(ondemand_on_ac)); + + powersave_on_ac = gtk_radio_button_new_with_label(list,_("Best power savings")); + gtk_widget_set_tooltip_text(powersave_on_ac,_("Set the CPU to its minimum frequency")); + gtk_box_pack_start (GTK_BOX (vbox), powersave_on_ac, FALSE, FALSE, 0); + list = gtk_radio_button_get_group(GTK_RADIO_BUTTON(powersave_on_ac)); + + conservative_on_ac = gtk_radio_button_new_with_label(list,_("Good power savings")); + gtk_widget_set_tooltip_text(conservative_on_ac, + _("gracefully increases and decreases the CPU speed depending on the current usage")); + gtk_box_pack_start (GTK_BOX (vbox), conservative_on_ac, FALSE, FALSE, 0); + + if ( govs & POWERSAVE ) + { + gtk_widget_set_sensitive(powersave_on_ac,enable); + g_signal_connect(powersave_on_ac,"pressed",G_CALLBACK(set_powersave_on_ac_cb),channel); + gtk_widget_show(powersave_on_ac); + if ( current_governor == POWERSAVE ) + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(powersave_on_ac),TRUE); + } + } + if ( govs & ONDEMAND ) + { + gtk_widget_set_sensitive(ondemand_on_ac,enable); + g_signal_connect(ondemand_on_ac,"pressed",G_CALLBACK(set_ondemand_on_ac_cb),channel); + gtk_widget_show(ondemand_on_ac); + if ( current_governor == ONDEMAND ) + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ondemand_on_ac),TRUE); + } + } + if ( govs & PERFORMANCE ) + { + gtk_widget_set_sensitive(performance_on_ac,enable); + g_signal_connect(performance_on_ac,"pressed",G_CALLBACK(set_performance_on_ac_cb),channel); + gtk_widget_show(performance_on_ac); + if ( current_governor == PERFORMANCE ) + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(performance_on_ac),TRUE); + } + } + if ( govs & CONSERVATIVE ) + { + gtk_widget_set_sensitive(conservative_on_ac,enable); + g_signal_connect(conservative_on_ac,"pressed",G_CALLBACK(set_conservative_on_ac_cb),channel); + gtk_widget_show(conservative_on_ac); + if ( current_governor == CONSERVATIVE ) + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(conservative_on_ac),TRUE); + } + } + + return frame; +} + +static GtkWidget * +xfpm_settings_cpu_on_battery_power(XfconfChannel *channel,guint8 govs,gboolean ups) +{ + GtkWidget *frame; + GtkWidget *align; + GtkWidget *vbox; + + GSList *list; + guint current_governor = xfconf_channel_get_uint(channel,ON_BATT_CPU_GOV_CFG,POWERSAVE); + gboolean enable = xfconf_channel_get_bool(channel,CPU_FREQ_SCALING_CFG,TRUE); + + frame = xfce_create_framebox(ups ? _("CPU frequency settings on UPS power") : _("CPU frequency settings on battery power"), &align); + gtk_container_set_border_width(GTK_CONTAINER(frame),BORDER); + gtk_widget_show(frame); + + vbox = gtk_vbox_new(FALSE,BORDER); + gtk_widget_show(vbox); + gtk_container_add(GTK_CONTAINER(align),vbox); + + performance_on_batt = gtk_radio_button_new_with_label(NULL,_("Best performance")); + gtk_widget_set_tooltip_text(performance_on_batt,_("Set the CPU to its maximum frequency")); + gtk_box_pack_start (GTK_BOX (vbox), performance_on_batt, FALSE, FALSE, 0); + + list = gtk_radio_button_get_group(GTK_RADIO_BUTTON(performance_on_batt)); + + ondemand_on_batt = gtk_radio_button_new_with_label(list,_("Ondemand performance")); + gtk_widget_set_tooltip_text(ondemand_on_batt,_("Set the CPU to its maximum speed when there is any load on it "\ + "and to its minimum speed when the system is idle")); + gtk_box_pack_start (GTK_BOX (vbox), ondemand_on_batt, FALSE, FALSE, 0); + list = gtk_radio_button_get_group(GTK_RADIO_BUTTON(ondemand_on_batt)); + + powersave_on_batt = gtk_radio_button_new_with_label(list,_("Best power savings")); + gtk_widget_set_tooltip_text(powersave_on_batt,_("Set the CPU to its minimum frequency")); + gtk_box_pack_start (GTK_BOX (vbox), powersave_on_batt, FALSE, FALSE, 0); + list = gtk_radio_button_get_group(GTK_RADIO_BUTTON(powersave_on_batt)); + + conservative_on_batt = gtk_radio_button_new_with_label(list,_("Good power savings")); + gtk_widget_set_tooltip_text(conservative_on_batt, + _("gracefully increases and decreases the CPU speed depending on the current usage")); + gtk_box_pack_start (GTK_BOX (vbox), conservative_on_batt, FALSE, FALSE, 0); + + if ( govs & POWERSAVE ) + { + gtk_widget_set_sensitive(powersave_on_batt,enable); + g_signal_connect(powersave_on_batt,"pressed",G_CALLBACK(set_powersave_on_batt_cb),channel); + gtk_widget_show(powersave_on_batt); + if ( current_governor == POWERSAVE ) + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(powersave_on_batt),TRUE); + } + } + if ( govs & ONDEMAND ) + { + gtk_widget_set_sensitive(ondemand_on_batt,enable); + g_signal_connect(ondemand_on_batt,"pressed",G_CALLBACK(set_ondemand_on_batt_cb),channel); + gtk_widget_show(ondemand_on_batt); + if ( current_governor == ONDEMAND ) + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ondemand_on_batt),TRUE); + } + } + if ( govs & PERFORMANCE ) + { + gtk_widget_set_sensitive(performance_on_batt,enable); + g_signal_connect(performance_on_batt,"pressed",G_CALLBACK(set_performance_on_batt_cb),channel); + gtk_widget_show(performance_on_batt); + if ( current_governor == PERFORMANCE ) + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(performance_on_batt),TRUE); + } + } + if ( govs & CONSERVATIVE ) + { + gtk_widget_set_sensitive(conservative_on_batt,enable); + g_signal_connect(conservative_on_batt,"pressed",G_CALLBACK(set_conservative_on_batt_cb),channel); + gtk_widget_show(conservative_on_batt); + if ( current_governor == CONSERVATIVE ) + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(conservative_on_batt),TRUE); + } + } + return frame; +} + +static GtkWidget * +xfpm_settings_cpu_freq(XfconfChannel *channel,guint8 govs,gboolean laptop,gboolean ups) +{ + GtkWidget *ntbox; + ntbox = gtk_notebook_new(); + + gtk_widget_show(ntbox); + + GtkWidget *vbox; + vbox = gtk_vbox_new(FALSE,0); + gtk_widget_show(vbox); + + gtk_box_pack_start(GTK_BOX(vbox),ntbox,TRUE,TRUE,0); + + if ( !govs ) + { + GtkWidget *label; + label = gtk_label_new(_("No CPU governor found")); + gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0); + gtk_widget_show(label); + gtk_widget_set_sensitive(GTK_WIDGET(cpu_gov),FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cpu_gov),FALSE); + } + + if ( govs & CPU_FREQ_CANNOT_BE_USED ) + { + GtkWidget *label; + label = gtk_label_new(_("CPU frequency control cannot be used")); + gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0); + gtk_widget_show(label); + gtk_widget_set_sensitive(GTK_WIDGET(cpu_gov),FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cpu_gov),FALSE); + } + + else + { + GtkWidget *label; + label = gtk_label_new(_("On AC power")); + gtk_widget_show(label); + GtkWidget *frame; + frame = xfpm_settings_cpu_on_ac_adapter(channel, + govs, + laptop || ups ? _("CPU frequency settings on AC power") : _("CPU frequency settings")); + gtk_notebook_append_page(GTK_NOTEBOOK(ntbox),frame,label); + + if ( laptop || ups ) + { + label = gtk_label_new(_("On battery power")); + gtk_widget_show(label); + frame = xfpm_settings_cpu_on_battery_power(channel,govs,ups); + gtk_notebook_append_page(GTK_NOTEBOOK(ntbox),frame,label); + } + } + + return vbox; +} + +static GtkWidget * +xfpm_settings_lcd_brightness(XfconfChannel *channel,gboolean laptop,gboolean lcd) +{ + GtkWidget *hbox; + GtkWidget *brg; + + hbox = gtk_hbox_new(FALSE,SPACING); + + if ( laptop && lcd) + { + brg = gtk_check_button_new_with_label(_("Enable LCD brightness control")); + gtk_box_pack_start(GTK_BOX(hbox),brg,FALSE,FALSE,0); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(brg), + xfconf_channel_get_bool(channel,LCD_BRIGHTNESS_CFG,TRUE)); + g_signal_connect(brg,"toggled",G_CALLBACK(set_lcd_brightness_cb),channel); + } + gtk_widget_show_all(hbox); + + return hbox; +} + +#ifdef HAVE_DPMS +static GtkWidget * +xfpm_settings_dpms_on_battery(XfconfChannel *channel,gboolean ups) +{ + GtkWidget *frame,*align; + frame = xfce_create_framebox(ups ? _("Monitor settings on UPS power") : _("Monitor settings on battery power"), &align); + gtk_widget_show(frame); + + gtk_container_set_border_width(GTK_CONTAINER(frame),BORDER); + + on_batt_dpms = xfpm_dpms_spins_new(); + gtk_widget_show(on_batt_dpms); + gtk_container_add(GTK_CONTAINER(align),on_batt_dpms); + GPtrArray *arr; + GValue *value; + guint value1 = 3 ,value2 = 4 ,value3 = 5; + arr = xfconf_channel_get_arrayv(channel,ON_BATT_DPMS_TIMEOUTS_CFG); + if ( arr ) + { + value = g_ptr_array_index(arr,0); + value1 = g_value_get_uint(value); + + value = g_ptr_array_index(arr,1); + value2 = g_value_get_uint(value); + + value = g_ptr_array_index(arr,2); + value3 = g_value_get_uint(value); + xfconf_array_free(arr); + } + xfpm_dpms_spins_set_default_values(XFPM_DPMS_SPINS(on_batt_dpms),value1,value2,value3); + gboolean dpms_enabled = xfconf_channel_get_bool(channel,DPMS_ENABLE_CFG,TRUE); + xfpm_dpms_spins_set_active(XFPM_DPMS_SPINS(on_batt_dpms),dpms_enabled); + g_signal_connect(on_batt_dpms,"dpms-value-changed", + G_CALLBACK(set_dpms_on_battery_cb),channel); + + return frame; + +} + + +static GtkWidget * +xfpm_settings_dpms_on_ac_adapter(XfconfChannel *channel,const gchar *label) +{ + GtkWidget *frame; + GtkWidget *align; + GtkWidget *vbox; + + frame = xfce_create_framebox(label, &align); + gtk_container_set_border_width(GTK_CONTAINER(frame),BORDER); + //gtk_widget_show(frame); + + vbox = gtk_vbox_new(FALSE, SPACING); + //gtk_widget_show(vbox); + + on_ac_dpms = xfpm_dpms_spins_new(); + gtk_widget_show(on_ac_dpms); + GPtrArray *arr; + GValue *value; + guint value1 = 30 ,value2 = 45 ,value3 = 60; + arr = xfconf_channel_get_arrayv(channel,ON_AC_DPMS_TIMEOUTS_CFG); + if ( arr ) + { + value = g_ptr_array_index(arr,0); + value1 = g_value_get_uint(value); + + value = g_ptr_array_index(arr,1); + value2 = g_value_get_uint(value); + + value = g_ptr_array_index(arr,2); + value3 = g_value_get_uint(value); + xfconf_array_free(arr); + } + xfpm_dpms_spins_set_default_values(XFPM_DPMS_SPINS(on_ac_dpms),value1,value2,value3); + gboolean dpms_enabled = xfconf_channel_get_bool(channel,DPMS_ENABLE_CFG,TRUE); + xfpm_dpms_spins_set_active(XFPM_DPMS_SPINS(on_ac_dpms),dpms_enabled); + g_signal_connect(on_ac_dpms,"dpms-value-changed", + G_CALLBACK(set_dpms_on_ac_cb),channel); + gtk_container_add(GTK_CONTAINER(align),vbox); + gtk_box_pack_start(GTK_BOX(vbox),on_ac_dpms,TRUE,TRUE,0); + gtk_widget_show_all(frame); + + return frame; +} +#endif + +static GtkWidget * +xfpm_settings_monitor(XfconfChannel *channel,gboolean laptop, + gboolean dpms_capable,gboolean lcd,gboolean ups) +{ + GtkWidget *ntbox; + ntbox = gtk_notebook_new(); + gtk_widget_show(ntbox); + GtkWidget *vbox; + vbox = gtk_vbox_new(FALSE,0); + + gtk_widget_show(vbox); +#ifdef HAVE_DPMS + GtkWidget *label; + GtkWidget *frame; + frame = xfpm_settings_dpms_on_ac_adapter(channel, + laptop || ups ? _("Monitor settings on AC power") : _("Monitor settings")); + label = gtk_label_new(_("On AC power")); + gtk_widget_show(label); + gtk_notebook_append_page(GTK_NOTEBOOK(ntbox),frame,label); + gtk_box_pack_start(GTK_BOX(vbox),ntbox,TRUE,TRUE,0); // or FALSE, FALSE to not stretch window to bottom; would then also not move the brightness control onto the lower end + + if ( laptop || ups ) + { + frame = xfpm_settings_dpms_on_battery(channel,ups); + label = gtk_label_new(_("On battery power")); + gtk_widget_show(label); + gtk_notebook_append_page(GTK_NOTEBOOK(ntbox),frame,label); + } + + if (! dpms_capable ) + { + GtkWidget *label; + label = gtk_label_new(_("Your monitor doesn't support DPMS control")); + gtk_widget_show(label); + gtk_box_pack_start(GTK_BOX(vbox),label,TRUE,TRUE,0); + gtk_widget_set_sensitive(dpms_op,FALSE); + xfpm_dpms_spins_set_active(XFPM_DPMS_SPINS(on_ac_dpms),FALSE); + + if ( GTK_IS_WIDGET(on_batt_dpms) ) + { + xfpm_dpms_spins_set_active(XFPM_DPMS_SPINS(on_batt_dpms),FALSE); + } + } +#endif + GtkWidget *lcd_box = xfpm_settings_lcd_brightness(channel,laptop,lcd); + gtk_box_pack_start(GTK_BOX(vbox),lcd_box,FALSE,FALSE,0); + return vbox; +} + + +static GtkWidget * +xfpm_settings_keys(XfconfChannel *channel, + gboolean laptop, + guint8 power_management, + guint8 switch_buttons) +{ + GtkWidget *table; + GtkWidget *label; + GtkWidget *frame,*align; + GtkWidget *vbox; + GtkWidget *w_align; + + vbox = gtk_vbox_new(FALSE,0); + gtk_widget_show(vbox); + + frame = xfce_create_framebox(_("Keyboard shortcuts"), &align); + gtk_widget_show(frame); + gtk_container_set_border_width(GTK_CONTAINER(frame),BORDER); + table = gtk_table_new(3,2,FALSE); + gtk_widget_show(table); + + guint active; + /// Power Button + if ( switch_buttons & POWER_SWITCH ) + { + w_align = gtk_alignment_new (0.0, 0.5, 0, 0); + gtk_widget_show(w_align); + label = gtk_label_new(_("When power button is pressed do")); + gtk_widget_show(label); + gtk_container_add(GTK_CONTAINER(w_align), label); + gtk_table_attach(GTK_TABLE(table),w_align,0,1,0,1,GTK_FILL,GTK_FILL,BORDER,SPACING); + GtkWidget *power_button; + power_button = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(power_button),_("Nothing")); + if ( power_management & SYSTEM_CAN_SUSPEND ) + gtk_combo_box_append_text(GTK_COMBO_BOX(power_button),_("Suspend")); + if ( power_management & SYSTEM_CAN_HIBERNATE ) + gtk_combo_box_append_text(GTK_COMBO_BOX(power_button),_("Hibernate")); + if ( power_management & SYSTEM_CAN_SHUTDOWN ) + gtk_combo_box_append_text(GTK_COMBO_BOX(power_button),_("Shutdown")); + + active = xfconf_channel_get_uint(channel,POWER_SWITCH_CFG,0); + active = _combo_helper_function(channel,POWER_SWITCH_CFG,power_management,active); + + gtk_combo_box_set_active(GTK_COMBO_BOX(power_button),active); + gtk_table_attach(GTK_TABLE(table),power_button,1,2,0,1,GTK_FILL,GTK_FILL,BORDER,SPACING); + g_signal_connect(power_button,"changed",G_CALLBACK(set_power_button_action_cb),channel); + + gtk_widget_show(power_button); + } + + /// Sleep Button + if ( switch_buttons & SLEEP_SWITCH ) + { + label = gtk_label_new(_("When sleep button is pressed do")); + gtk_widget_show(label); + w_align = gtk_alignment_new (0.0, 0.5, 0, 0); + gtk_widget_show(w_align); + gtk_container_add(GTK_CONTAINER(w_align), label); + gtk_table_attach(GTK_TABLE(table),w_align,0,1,1,2,GTK_FILL,GTK_FILL,BORDER,SPACING); + + GtkWidget *sleep_button; + active = xfconf_channel_get_uint(channel,SLEEP_SWITCH_CFG,0); + sleep_button = gtk_combo_box_new_text(); + + gtk_combo_box_append_text(GTK_COMBO_BOX(sleep_button),_("Nothing")); + if ( power_management & SYSTEM_CAN_SUSPEND ) + gtk_combo_box_append_text(GTK_COMBO_BOX(sleep_button),_("Suspend")); + if ( power_management & SYSTEM_CAN_HIBERNATE ) + gtk_combo_box_append_text(GTK_COMBO_BOX(sleep_button),_("Hibernate")); + if ( power_management & SYSTEM_CAN_SHUTDOWN ) + gtk_combo_box_append_text(GTK_COMBO_BOX(sleep_button),_("Shutdown")); + active = _combo_helper_function(channel,POWER_SWITCH_CFG,power_management,active); + gtk_combo_box_set_active(GTK_COMBO_BOX(sleep_button),active); + gtk_widget_show(sleep_button); + gtk_table_attach(GTK_TABLE(table),sleep_button,1,2,1,2,GTK_FILL,GTK_FILL,BORDER,SPACING); + g_signal_connect(sleep_button,"changed",G_CALLBACK(set_sleep_button_action_cb),channel); + } + + /// Lid Button + if ( laptop && ( switch_buttons & LID_SWITCH ) ) + { + label = gtk_label_new(_("When laptop lid is closed")); + gtk_widget_show(label); + w_align = gtk_alignment_new (0.0, 0.5, 0, 0); + gtk_widget_show(w_align); + gtk_container_add(GTK_CONTAINER(w_align), label); + gtk_table_attach(GTK_TABLE(table),w_align,0,1,2,3,GTK_FILL,GTK_FILL,BORDER,SPACING); + GtkWidget *lid_button; + active = xfconf_channel_get_uint(channel,LID_SWITCH_CFG,0); + lid_button = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(lid_button),_("Nothing")); + if ( power_management & SYSTEM_CAN_SUSPEND ) + gtk_combo_box_append_text(GTK_COMBO_BOX(lid_button),_("Suspend")); + if ( power_management & SYSTEM_CAN_SUSPEND ) + gtk_combo_box_append_text(GTK_COMBO_BOX(lid_button),_("Hibernate")); + if ( power_management & SYSTEM_CAN_SHUTDOWN ) + gtk_combo_box_append_text(GTK_COMBO_BOX(lid_button),_("Shutdown")); + active = _combo_helper_function(channel,POWER_SWITCH_CFG,power_management,active); + gtk_combo_box_set_active(GTK_COMBO_BOX(lid_button),active); + gtk_widget_show(lid_button); + gtk_table_attach(GTK_TABLE(table),lid_button,1,2,2,3,GTK_FILL,GTK_FILL,BORDER,SPACING); + g_signal_connect(lid_button,"changed",G_CALLBACK(set_lid_button_action_cb),channel); + } + + gtk_container_add(GTK_CONTAINER(align),vbox); + gtk_box_pack_start(GTK_BOX(vbox),table,TRUE,TRUE,0); + if ( !switch_buttons ) + { + label = gtk_label_new(_("No available keyboard shortcuts found")); + gtk_widget_show(label); + gtk_box_pack_start(GTK_BOX(vbox),label,TRUE,TRUE,0); + } + return frame; + +} + +static GtkWidget * +xfpm_settings_general(XfconfChannel *channel,gboolean battery_settings,gboolean ups,guint8 govs) +{ + GtkWidget *table; + GtkWidget *show_icon; + GtkWidget *label; + GtkWidget *frame,*align; + GtkWidget *hbox; + gint i = 0; + + frame = xfce_create_framebox(_("General Options"), &align); + //gtk_widget_show(frame); + //table = gtk_table_new(4,2,FALSE); + table = gtk_vbox_new (FALSE, SPACING); + //gtk_widget_show(table); + gtk_container_add(GTK_CONTAINER(align),table); + + hbox = gtk_hbox_new (FALSE, SPACING); + gtk_box_pack_start (GTK_BOX(table), hbox, FALSE, FALSE, SPACING); + + /* Systray icon */ + label = gtk_label_new(_("System tray icon:")); + //gtk_widget_show(label); + //gtk_table_attach(GTK_TABLE(table),label,0,1,i,i+1,GTK_SHRINK,GTK_SHRINK,SPACING,SPACING); + gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, SPACING); + + guint icon_cfg = xfconf_channel_get_uint(channel,SHOW_TRAY_ICON_CFG,0); + show_icon = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(show_icon),_("Always Display an icon")); + gtk_combo_box_append_text(GTK_COMBO_BOX(show_icon),_("When battery is present")); + if ( battery_settings || ups ) + { + gtk_combo_box_append_text(GTK_COMBO_BOX(show_icon),_("When battery is charging or discharging")); + + } else if ( icon_cfg == 2 ) /* set to default value then */ + { + if(!xfconf_channel_set_uint(channel,SHOW_TRAY_ICON_CFG,0)) + { + g_critical("Cannot set value %s\n",SHOW_TRAY_ICON_CFG); + + } + icon_cfg = 0; + } + gtk_combo_box_set_active(GTK_COMBO_BOX(show_icon),icon_cfg); + g_signal_connect(show_icon,"changed",G_CALLBACK(set_show_tray_icon_cb),channel); + //gtk_widget_show(show_icon); + //gtk_table_attach(GTK_TABLE(table),show_icon,1,2,i,i+1,GTK_SHRINK,GTK_SHRINK,0,SPACING); + gtk_box_pack_start (GTK_BOX(hbox), show_icon, FALSE, FALSE, SPACING); + i++; + + cpu_gov = gtk_check_button_new_with_label(_("Enable CPU frequency scaling control")); + if ( govs ) + { + gboolean cpu_gov_enabled; + //label = gtk_label_new(_("Enable CPU frequency scaling control")); + //gtk_widget_show(label); + //gtk_table_attach(GTK_TABLE(table),label,0,1,i,i+1,GTK_SHRINK,GTK_SHRINK,0,SPACING); + //gtk_widget_show(cpu_gov); + cpu_gov_enabled = xfconf_channel_get_bool(channel,CPU_FREQ_SCALING_CFG,TRUE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cpu_gov), + cpu_gov_enabled); + g_signal_connect(cpu_gov,"toggled",G_CALLBACK(set_cpu_freq_scaling_cb),channel); + //gtk_table_attach(GTK_TABLE(table),cpu_gov,0,2,i,i+1,GTK_SHRINK,GTK_SHRINK,0,SPACING); + gtk_box_pack_start (GTK_BOX(table), cpu_gov, FALSE, FALSE, SPACING); + i++; + } + +#ifdef HAVE_DPMS + gboolean dpms_enabled; + //label = gtk_label_new(_("Enable monitor power management control")); + //gtk_widget_show(label); + //gtk_table_attach(GTK_TABLE(table),label,0,1,i,i+1,GTK_SHRINK,GTK_SHRINK,0,SPACING); + dpms_op = gtk_check_button_new_with_label(_("Enable monitor power management control")); + //gtk_widget_show(dpms_op); + dpms_enabled = xfconf_channel_get_bool(channel,DPMS_ENABLE_CFG,TRUE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dpms_op), + dpms_enabled); + g_signal_connect(dpms_op,"toggled",G_CALLBACK(set_dpms_cb),channel); + //gtk_table_attach(GTK_TABLE(table),dpms_op,0,2,i,i+1,GTK_SHRINK,GTK_SHRINK,0,SPACING); + gtk_box_pack_start (GTK_BOX(table), dpms_op, FALSE, FALSE, SPACING); + +#endif + + gtk_widget_show_all (frame); + return frame; +} + + +static void +_cursor_changed_cb(GtkIconView *view,gpointer data) +{ + GtkTreeSelection *sel; + GtkTreeModel *model; + GtkTreeIter selected_row; + gint int_data = 0; + + sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); + + gtk_tree_selection_get_selected(sel,&model,&selected_row); + + gtk_tree_model_get(model, + &selected_row, + 2, + &int_data, + -1); + + if ( int_data >= 0 && int_data <= 3 ) + { + gtk_notebook_set_current_page(GTK_NOTEBOOK(nt),int_data); + } +} + +static GtkWidget * +xfpm_settings_tree_view(gboolean is_laptop,gboolean ups,guint8 govs,gboolean lcd,gboolean switch_buttons) +{ + GdkPixbuf *pix; + GtkWidget *view; + GtkListStore *list_store; + GtkTreeIter iter; + GtkTreeViewColumn *col; + GtkCellRenderer *renderer; + gint i = 0; + + list_store = gtk_list_store_new(3,GDK_TYPE_PIXBUF,G_TYPE_STRING,G_TYPE_INT); + + view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store)); + gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(view),TRUE); + col = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(col,_("Advanced settings")); + + renderer = gtk_cell_renderer_pixbuf_new(); + gtk_tree_view_column_pack_start(col,renderer,FALSE); + gtk_tree_view_column_set_attributes(col,renderer,"pixbuf",0,NULL); + + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_column_pack_start(col,renderer,FALSE); + gtk_tree_view_column_set_attributes(col,renderer,"text",1,NULL); + + gtk_tree_view_append_column(GTK_TREE_VIEW(view),col); + + /// CPU Settings + if ( govs ) + { + pix = xfpm_load_icon("xfpm-cpu",38); + gtk_list_store_append(list_store,&iter); + if ( pix ) + { + gtk_list_store_set(list_store,&iter,0,pix,1,_("CPU settings"),2,i,-1); + g_object_unref(pix); + } + else + { + gtk_list_store_set(list_store,&iter,1,_("CPU settings"),2,i,-1); + } + i++; + } + + /// Battery Settings + if ( is_laptop || ups ) + { + pix = xfpm_load_icon(ups ? "gpm-ups-100" : "battery",38); + gtk_list_store_append(list_store,&iter); + if ( pix ) + { + gtk_list_store_set(list_store,&iter,0,pix,1,_("Battery settings"),2,i,-1); + g_object_unref(pix); + } + else + { + gtk_list_store_set(list_store,&iter,1,_("Battery settings"),2,i,-1); + } + i++; + } + + /// Keyboard Settings + if ( switch_buttons) + { + pix = xfpm_load_icon("keyboard",38); + gtk_list_store_append(list_store,&iter); + if ( pix ) + { + gtk_list_store_set(list_store,&iter,0,pix,1,_("Shortcuts"),2,i,-1); + g_object_unref(pix); + } + else + { + gtk_list_store_set(list_store,&iter,1,_("Shortcuts"),2,i,-1); + } + i++; + } + + /// Dpms settings + gboolean show_monitor_settings = FALSE; +#ifdef HAVE_DPMS + show_monitor_settings = TRUE; +#else + if ( lcd ) + show_monitor_settings = TRUE; +#endif + + if ( show_monitor_settings ) + { + pix = xfpm_load_icon("display",38); + gtk_list_store_append(list_store,&iter); + if ( pix ) + { + gtk_list_store_set(list_store,&iter,0,pix,1,_("Monitor Settings"),2,i,-1); + g_object_unref(pix); + } + else + { + gtk_list_store_set(list_store,&iter,1,_("Monitor Settings"),2,i,-1); + } + i++; + } + GtkTreeSelection *sel; + GtkTreePath *path; + + sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); + path = gtk_tree_path_new_from_string("0"); + gtk_tree_selection_select_path(sel, path); + gtk_tree_path_free(path); + g_signal_connect(view,"cursor-changed",G_CALLBACK(_cursor_changed_cb),NULL); + + return view; +} + +GtkWidget * +xfpm_settings_new(XfconfChannel *channel, + gboolean is_laptop, + guint8 power_management, + gboolean dpms_capable, + guint8 govs, + guint8 switch_buttons, + gboolean lcd, + gboolean ups_found, + guint32 socket_id) +{ + GtkWidget *Dialog; /* Main dialog window */ + GtkWidget *mainbox; /* Box to get (Dialog)->vbox */ + GtkWidget *box; + GtkWidget *table; + GtkWidget *view; + GtkWidget *allbox; + GtkWidget *frame,*align; + + Dialog = xfce_titled_dialog_new_with_buttons(_("Power Manager Preferences"), + NULL, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_STOCK_CLOSE, + GTK_RESPONSE_CANCEL, + GTK_STOCK_HELP, + GTK_RESPONSE_HELP, + NULL); + + gtk_window_set_icon_name(GTK_WINDOW(Dialog),"gpm-ac-adapter"); + gtk_dialog_set_default_response(GTK_DIALOG(Dialog),GTK_RESPONSE_CLOSE); + mainbox = GTK_DIALOG(Dialog)->vbox; + + allbox = gtk_vbox_new(FALSE,0); + gtk_widget_show(allbox); + gtk_box_pack_start(GTK_BOX(mainbox),allbox,TRUE,TRUE,0); + + gboolean ups; + ups = is_laptop ? FALSE : ups_found; + + /// General Options Frame + box = xfpm_settings_general(channel,is_laptop,ups,govs); + gtk_box_pack_start (GTK_BOX (allbox), box, FALSE, FALSE, SPACING); + + /// Notebook container, comes into big table container + nt = gtk_notebook_new(); + + gtk_notebook_set_show_tabs(GTK_NOTEBOOK(nt),FALSE); + table = gtk_hbox_new (FALSE, SPACING); + gtk_widget_show(table); + + frame = xfce_create_framebox(_("Extended"), &align); + gtk_widget_show (frame); + gtk_container_add (GTK_CONTAINER(align), table); + + gtk_box_pack_start (GTK_BOX (allbox), frame, TRUE, TRUE, SPACING); + + view = xfpm_settings_tree_view(is_laptop,ups_found,govs,lcd,switch_buttons); + +#ifndef HAVE_DPMS + if ( is_laptop || ups_found || govs || switch_buttons ) + { +#endif + gtk_box_pack_start (GTK_BOX(table), view, FALSE, FALSE, SPACING); + gtk_widget_show(view); + gtk_box_pack_start (GTK_BOX(table), nt, TRUE, TRUE, 0); // spacing ain't nice here // SPACING); + gtk_widget_show(nt); + +#ifndef HAVE_DPMS +} +#endif + + /// Cpu freq settings + if ( govs ) + { + box = xfpm_settings_cpu_freq(channel,govs,is_laptop,ups); + gtk_notebook_append_page(GTK_NOTEBOOK(nt),box,NULL); + } + + /// Battery settings + + if ( is_laptop || ups ) + { + box = xfpm_settings_battery(channel,power_management,ups); + gtk_notebook_append_page(GTK_NOTEBOOK(nt),box,NULL); + } + + /// Keyboard buttons settings + if ( switch_buttons) + { + box = xfpm_settings_keys(channel,is_laptop,power_management,switch_buttons); + gtk_notebook_append_page(GTK_NOTEBOOK(nt),box,NULL); + } + + /// Dpms & LCD brightness settings + + box = xfpm_settings_monitor(channel,is_laptop,dpms_capable,lcd,ups); + gtk_notebook_append_page(GTK_NOTEBOOK(nt),box,NULL); + + + GtkWidget *plug; + if ( socket_id != 0 ) + { + plug = gtk_plug_new(socket_id); + gtk_widget_show (plug); + gtk_widget_reparent(allbox,plug); + } + return socket_id == 0 ? Dialog : plug ; +} |