[Xfce4-commits] [xfce/xfce4-power-manager] 02/02: panel-plugin: Add properties dialog (Bug #13270)

noreply at xfce.org noreply at xfce.org
Sun Oct 29 23:28:48 CET 2017


This is an automated email from the git hooks/post-receive script.

o   c   h   o   s   i       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository xfce/xfce4-power-manager.

commit e319a4932617fed22d8ddb27fe4a917f973f2e58
Author: Simon Steinbeiss <simon.steinbeiss at elfenbeinturm.at>
Date:   Sun Oct 29 23:28:12 2017 +0100

    panel-plugin: Add properties dialog (Bug #13270)
    
    So far the only option we have there is the formerly
    hidden option show-panel-label.
---
 .../xfce/xfce-power-manager-plugin.c               | 165 +++++++++++++++++++++
 1 file changed, 165 insertions(+)

diff --git a/panel-plugins/power-manager-plugin/xfce/xfce-power-manager-plugin.c b/panel-plugins/power-manager-plugin/xfce/xfce-power-manager-plugin.c
index 66e1de4..28159fb 100644
--- a/panel-plugins/power-manager-plugin/xfce/xfce-power-manager-plugin.c
+++ b/panel-plugins/power-manager-plugin/xfce/xfce-power-manager-plugin.c
@@ -33,10 +33,13 @@
 #ifdef XFCE_PLUGIN
 #include <libxfce4panel/libxfce4panel.h>
 #include <libxfce4panel/xfce-panel-plugin.h>
+#include <libxfce4ui/libxfce4ui.h>
 #include <libxfce4util/libxfce4util.h>
+#include <xfconf/xfconf.h>
 #endif
 
 #include "../power-manager-button.h"
+#include "common/xfpm-config.h"
 
 /* plugin structure */
 typedef struct
@@ -49,12 +52,169 @@ typedef struct
 }
 PowerManagerPlugin;
 
+enum {
+  COLUMN_INT,
+  COLUMN_STRING,
+  N_COLUMNS
+};
 
 /* prototypes */
 static void power_manager_plugin_construct (XfcePanelPlugin *plugin);
 /* register the plugin */
 XFCE_PANEL_PLUGIN_REGISTER (power_manager_plugin_construct);
 
+static void
+power_manager_plugin_configure_response (GtkWidget    *dialog,
+                           gint          response,
+                           PowerManagerPlugin *power_manager_plugin)
+{
+  gboolean result;
+
+  if (response == GTK_RESPONSE_HELP)
+    {
+      result = g_spawn_command_line_async ("exo-open --launch WebBrowser " "http://docs.xfce.org/xfce/xfce4-power-manager/1.6/start", NULL);
+
+      if (G_UNLIKELY (result == FALSE))
+        g_warning (_("Unable to open the following url: %s"), "http://docs.xfce.org/xfce/xfce4-power-manager/1.6/start");
+    }
+  else
+    {
+      g_object_set_data (G_OBJECT (power_manager_plugin->plugin), "dialog", NULL);
+      xfce_panel_plugin_unblock_menu (power_manager_plugin->plugin);
+      gtk_widget_destroy (dialog);
+    }
+}
+
+/* Update xfconf property if combobox selection is changed */
+static void
+power_manager_plugin_panel_label_changed (XfconfChannel *channel,
+                                          const gchar *property,
+                                          const GValue *value,
+                                          gpointer user_data)
+{
+  GtkWidget *combo = user_data;
+  GtkListStore *list_store;
+  GtkTreeIter iter;
+  int show_panel_label, current_setting;
+
+  list_store = GTK_LIST_STORE (gtk_combo_box_get_model (GTK_COMBO_BOX (combo)));
+  current_setting = g_value_get_int (value);
+
+  for (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (list_store), &iter);
+        gtk_list_store_iter_is_valid (list_store, &iter);
+        gtk_tree_model_iter_next (GTK_TREE_MODEL (list_store), &iter))
+    {
+      gtk_tree_model_get (GTK_TREE_MODEL (list_store), &iter, 0, &show_panel_label, -1);
+      if (show_panel_label == current_setting)
+        gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo),
+                                       &iter);
+    }
+}
+
+/* Update combo if property in channel changes */
+static void
+power_manager_plugin_combo_changed (GtkComboBox *combo,
+                                    gpointer user_data)
+{
+  XfconfChannel *channel = user_data;
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  int show_panel_label;
+
+  if(!gtk_combo_box_get_active_iter(combo, &iter))
+    return;
+
+  model = gtk_combo_box_get_model (combo);
+
+  gtk_tree_model_get (model, &iter, 0, &show_panel_label, -1);
+  xfconf_channel_set_int(channel, PROPERTIES_PREFIX SHOW_PANEL_LABEL, show_panel_label);
+}
+
+void
+power_manager_plugin_configure (XfcePanelPlugin      *plugin,
+                                PowerManagerPlugin   *power_manager_plugin)
+{
+  GtkWidget *dialog;
+  GtkWidget *grid, *combo, *label, *check;
+  GtkAdjustment *adjustment;
+  gint show_panel_label;
+  XfconfChannel   *channel;
+  GtkListStore *list_store;
+  GtkTreePath *path;
+  GtkTreeIter iter, active_iter;
+  GtkCellRenderer *cell;
+  gint i;
+  gchar *options[] = { _("None"), _("Percentage"), _("Remaining time"), _("Percentage and remaining time") };
+
+  channel = xfconf_channel_get ("xfce4-power-manager");
+
+  /* block the plugin menu */
+  xfce_panel_plugin_block_menu (plugin);
+
+  /* create the dialog */
+  dialog = xfce_titled_dialog_new_with_buttons (_("Power Manager Plugin Settings"),
+                                                GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (plugin))),
+                                                GTK_DIALOG_DESTROY_WITH_PARENT,
+                                                "gtk-help", GTK_RESPONSE_HELP,
+                                                "gtk-close", GTK_RESPONSE_OK,
+                                                NULL);
+  gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
+  gtk_window_set_icon_name (GTK_WINDOW (dialog), "xfce4-power-manager-settings");
+  gtk_widget_show (dialog);
+
+  /* Set up the main grid for all settings */
+  grid = gtk_grid_new ();
+  gtk_grid_set_row_spacing (GTK_GRID (grid), 6);
+  gtk_grid_set_column_spacing (GTK_GRID (grid), 12);
+  gtk_widget_set_margin_start (grid, 12);
+  gtk_widget_set_margin_end (grid, 12);
+  gtk_widget_set_margin_top (grid, 12);
+  gtk_widget_set_margin_bottom (grid, 12);
+  gtk_container_add_with_properties (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
+						                         grid, "expand", TRUE, "fill", TRUE, NULL);
+
+  /* show-panel-label setting */
+  label = gtk_label_new (_("Show label:"));
+  gtk_label_set_xalign (GTK_LABEL (label), 0.0);
+  gtk_grid_attach (GTK_GRID (grid), GTK_WIDGET (label), 0, 0, 1, 1);
+  show_panel_label = xfconf_channel_get_int (channel, PROPERTIES_PREFIX SHOW_PANEL_LABEL, -1);
+
+  list_store = gtk_list_store_new (N_COLUMNS,
+                                   G_TYPE_INT,
+                                   G_TYPE_STRING);
+
+  for (i = 0; i < 4; i++) {
+    gtk_list_store_append (list_store, &iter);
+    gtk_list_store_set (list_store, &iter,
+                        COLUMN_INT, i,
+                        COLUMN_STRING, options[i],
+                        -1);
+    if (i == show_panel_label)
+      active_iter = iter;
+  }
+  combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (list_store));
+  cell = gtk_cell_renderer_text_new ();
+  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, TRUE );
+  gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), cell, "text", COLUMN_STRING, NULL);
+  gtk_combo_box_set_id_column (GTK_COMBO_BOX (combo), COLUMN_STRING);
+  gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo), &active_iter);
+  gtk_grid_attach (GTK_GRID (grid), GTK_WIDGET (combo), 1, 0, 1, 1);
+  g_signal_connect (G_OBJECT (combo), "changed",
+                    G_CALLBACK (power_manager_plugin_combo_changed),
+                    channel);
+  g_signal_connect (G_OBJECT (channel), "property-changed::" PROPERTIES_PREFIX SHOW_PANEL_LABEL,
+                    G_CALLBACK (power_manager_plugin_panel_label_changed),
+                    combo);
+
+  /* link the dialog to the plugin, so we can destroy it when the plugin
+   * is closed, but the dialog is still open */
+  g_object_set_data (G_OBJECT (plugin), "dialog", dialog);
+
+  g_signal_connect (G_OBJECT (dialog), "response",
+                    G_CALLBACK(power_manager_plugin_configure_response), power_manager_plugin);
+  gtk_widget_show_all (grid);
+}
+
 
 static PowerManagerPlugin *
 power_manager_plugin_new (XfcePanelPlugin *plugin)
@@ -90,6 +250,11 @@ power_manager_plugin_construct (XfcePanelPlugin *plugin)
     /* create the plugin */
     power_manager_plugin = power_manager_plugin_new (plugin);
 
+    /* show the configure menu item and connect signal */
+    xfce_panel_plugin_menu_show_configure (plugin);
+    g_signal_connect (G_OBJECT (plugin), "configure-plugin",
+                      G_CALLBACK (power_manager_plugin_configure), power_manager_plugin);
+
     /* add the ebox to the panel */
     gtk_container_add (GTK_CONTAINER (plugin), power_manager_plugin->ebox);
 }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list