[Xfce4-commits] [panel-plugins/xfce4-systemload-plugin] 01/01: Add a way to run a command when clicking on systemload plugin (bug #3887)
noreply at xfce.org
noreply at xfce.org
Tue Jul 29 21:34:46 CEST 2014
This is an automated email from the git hooks/post-receive script.
landry pushed a commit to branch master
in repository panel-plugins/xfce4-systemload-plugin.
commit a08eacc1afa245e4d66d29815958c67de3d6bb2f
Author: Liquider <liquiderz at gmail.com>
Date: Tue Jul 29 21:34:00 2014 +0200
Add a way to run a command when clicking on systemload plugin (bug #3887)
With some tweaks by me..
---
panel-plugin/systemload.c | 68 +++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 65 insertions(+), 3 deletions(-)
diff --git a/panel-plugin/systemload.c b/panel-plugin/systemload.c
index 30636e9..d81d844 100644
--- a/panel-plugin/systemload.c
+++ b/panel-plugin/systemload.c
@@ -52,6 +52,7 @@ static gchar *MONITOR_ROOT[] = { "SL_Cpu", "SL_Mem", "SL_Swap", "SL_Uptime" };
static gchar *DEFAULT_TEXT[] = { "cpu", "mem", "swap" };
static gchar *DEFAULT_COLOR[] = { "#0000c0", "#00c000", "#f0f000" };
+static gchar *DEFAULT_COMMAND_TEXT = "xfce4-taskmanager";
#define UPDATE_TIMEOUT 250
#define UPDATE_TIMEOUT_SECONDS 1
@@ -77,6 +78,12 @@ typedef struct
typedef struct
{
+ gboolean enabled;
+ gchar *command_text;
+} t_command;
+
+typedef struct
+{
GtkWidget *box;
GtkWidget *label;
GtkWidget *status;
@@ -102,9 +109,11 @@ typedef struct
XfcePanelPlugin *plugin;
GtkWidget *ebox;
GtkWidget *box;
+ GtkWidget *menu_item;
guint timeout, timeout_seconds;
gboolean use_timeout_seconds;
guint timeout_id;
+ t_command command;
t_monitor *monitor[3];
t_uptime_monitor *uptime;
#ifdef HAVE_UPOWER_GLIB
@@ -112,6 +121,23 @@ typedef struct
#endif
} t_global_monitor;
+static gboolean
+spawn_system_monitor(GtkWidget *w, t_global_monitor *global)
+{
+ // Spawn defined command; In-terminal: false, Startup-notify: false
+ return xfce_spawn_command_line_on_screen(gdk_screen_get_default(),
+ global->command.command_text,
+ FALSE, FALSE, NULL);
+}
+
+static gboolean
+click_event(GtkWidget *w, GdkEventButton *event, t_global_monitor *global)
+{
+ if(event->button == 1 && global->command.enabled && *(global->command.command_text))
+ return spawn_system_monitor(w, global);
+ return FALSE;
+}
+
static gint
update_monitors(t_global_monitor *global)
{
@@ -316,6 +342,15 @@ monitor_control_new(XfcePanelPlugin *plugin)
gtk_widget_show(global->ebox);
global->box = NULL;
+ global->command.enabled = FALSE;
+ global->command.command_text = g_strdup(DEFAULT_COMMAND_TEXT);
+
+ global->menu_item = gtk_image_menu_item_new_with_mnemonic(
+ _("Run _System Monitor"));
+ GtkWidget* image = gtk_image_new_from_icon_name("utilities-system-monitor",
+ GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(global->menu_item), image);
+
xfce_panel_plugin_add_action_widget (plugin, global->ebox);
for(count = 0; count < 3; count++)
@@ -357,6 +392,9 @@ monitor_free(XfcePanelPlugin *plugin, t_global_monitor *global)
if (global->timeout_id)
g_source_remove(global->timeout_id);
+ g_free(global->command.command_text);
+ g_free(global->menu_item);
+
for(count = 0; count < 3; count++)
{
if (global->monitor[count]->options.label_text)
@@ -472,6 +510,16 @@ monitor_read_config(XfcePanelPlugin *plugin, t_global_monitor *global)
rc, "Timeout_Seconds", global->timeout_seconds);
global->use_timeout_seconds = xfce_rc_read_bool_entry (
rc, "Use_Timeout_Seconds", global->use_timeout_seconds);
+ global->command.enabled = xfce_rc_read_bool_entry (
+ rc, "Use_Click_Command", global->command.enabled);
+ value = xfce_rc_read_entry (
+ rc, "Click_Command", NULL);
+ if (value && *value)
+ {
+ if (global->command.command_text)
+ g_free(global->command.command_text);
+ global->command.command_text = g_strdup(value);
+ }
}
for(count = 0; count < 3; count++)
@@ -533,6 +581,8 @@ monitor_write_config(XfcePanelPlugin *plugin, t_global_monitor *global)
xfce_rc_write_int_entry (rc, "Timeout_Seconds", global->timeout_seconds);
xfce_rc_write_bool_entry (rc, "Use_Timeout_Seconds",
global->use_timeout_seconds);
+ xfce_rc_write_bool_entry (rc, "Use_Click_Command", global->command.enabled);
+ xfce_rc_write_entry (rc, "Click_Command", global->command.command_text);
for(count = 0; count < 3; count++)
{
@@ -655,7 +705,9 @@ check_button_cb(GtkToggleButton *check_button, t_global_monitor *global)
*boolvar = gtk_toggle_button_get_active(check_button);
if (sensitive_widget)
gtk_widget_set_sensitive(GTK_WIDGET(sensitive_widget), *boolvar);
- if (oldstate != *boolvar)
+ if (boolvar == &(global->command.enabled)) {
+ gtk_widget_set_visible(global->menu_item, *boolvar);
+ } else if (oldstate != *boolvar)
setup_monitor(global);
}
@@ -840,7 +892,7 @@ monitor_create_options(XfcePanelPlugin *plugin, t_global_monitor *global)
content = GTK_BOX(gtk_dialog_get_content_area (GTK_DIALOG(dlg)));
- table = new_frame(global, content, _("General"), 2, NULL);
+ table = new_frame(global, content, _("General"), 3, NULL);
new_spin_button(global, table, 0,
_("Update interval:"), _("s"),
(gfloat)global->timeout/1000.0, 0.100, 10.000, .050,
@@ -852,7 +904,9 @@ monitor_create_options(XfcePanelPlugin *plugin, t_global_monitor *global)
G_CALLBACK(change_timeout_seconds_cb),
&global->use_timeout_seconds);
#endif
-
+ new_entry(global, table, 2,
+ _("System monitor:"),
+ &global->command.command_text, &global->command.enabled);
for(count = 0; count < 3; count++)
{
monitor = global->monitor[count];
@@ -955,6 +1009,14 @@ systemload_construct (XfcePanelPlugin *plugin)
G_CALLBACK (monitor_set_orientation), global);
#endif
+ g_signal_connect (plugin, "button-press-event", G_CALLBACK (click_event),
+ global);
+
+ xfce_panel_plugin_menu_insert_item (plugin, GTK_MENU_ITEM (global->menu_item));
+ g_signal_connect (GTK_MENU_ITEM(global->menu_item), "activate",
+ G_CALLBACK (spawn_system_monitor), global);
+ gtk_widget_set_visible (global->menu_item, global->command.enabled);
+
xfce_panel_plugin_menu_show_configure (plugin);
g_signal_connect (plugin, "configure-plugin",
G_CALLBACK (monitor_create_options), global);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list