[Xfce4-commits] [xfce/xfce4-power-manager] 07/63: Start porting the panel-plugin to Gtk3

noreply at xfce.org noreply at xfce.org
Sun Mar 22 13:02:02 CET 2015


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

eric pushed a commit to branch master
in repository xfce/xfce4-power-manager.

commit 53b58d0ff6d73fa513861cb45ab8050610af580b
Author: Simon Steinbeiss <simon.steinbeiss at elfenbeinturm.at>
Date:   Tue Mar 3 19:56:37 2015 +0300

    Start porting the panel-plugin to Gtk3
---
 configure.ac.in                                    |    7 +-
 .../power-manager-plugin/power-manager-button.c    |   82 +++++++++++++-------
 panel-plugins/power-manager-plugin/scalemenuitem.c |   58 ++++++++------
 .../xfce/power-manager-plugin.desktop.in.in        |    1 +
 4 files changed, 97 insertions(+), 51 deletions(-)

diff --git a/configure.ac.in b/configure.ac.in
index b01654a..dabb577 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -65,9 +65,10 @@ m4_define([dbus_minimum_version], [1.1])
 m4_define([dbus_glib_minimum_version], [0.84])
 
 m4_define([xfconf_minimum_version], [4.10.0])
-m4_define([libxfce4ui_minimum_version],[4.10.0])
+m4_define([libxfce4ui_minimum_version],[4.11.0])
 m4_define([libxfce4util_minimum_version],[4.10.0])
-m4_define([libxfce4panel_minimum_version],[4.10.0])
+m4_define([libxfce4panel_minimum_version],[4.11.0])
+
 m4_define([lxdepanel_new_minimum_version],[0.7.0])
 m4_define([lxdepanel_minimum_version],[0.5.6])
 
@@ -152,7 +153,7 @@ else
 	build_panel_plugins="yes"
 fi
 
-XDT_CHECK_OPTIONAL_PACKAGE([LIBXFCE4PANEL], [libxfce4panel-1.0], [libxfce4panel_minimum_version],
+XDT_CHECK_OPTIONAL_PACKAGE([LIBXFCE4PANEL], [libxfce4panel-2.0], [libxfce4panel_minimum_version],
 [xfce4panel], [To build plugin support for Xfce's panel])
 
 XDT_CHECK_OPTIONAL_PACKAGE([LXDEPANEL_NEW], [lxpanel], [lxdepanel_new_minimum_version],
diff --git a/panel-plugins/power-manager-plugin/power-manager-button.c b/panel-plugins/power-manager-plugin/power-manager-button.c
index d5fef44..874a100 100644
--- a/panel-plugins/power-manager-plugin/power-manager-button.c
+++ b/panel-plugins/power-manager-plugin/power-manager-button.c
@@ -382,7 +382,7 @@ power_manager_button_update_device_icon_and_details (PowerManagerButton *button,
 		   NULL);
 
     icon_name = get_device_icon_name (button->priv->upower, device);
-    details = get_device_description(button->priv->upower, device);
+    details = get_device_description (button->priv->upower, device);
 
     pix = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
 				    icon_name,
@@ -415,15 +415,29 @@ power_manager_button_update_device_icon_and_details (PowerManagerButton *button,
     /* If the menu is being displayed, update it */
     if (button->priv->menu && battery_device->menu_item)
     {
+        GList *children, *iter;
+        GtkWidget *box, *image;
         gtk_menu_item_set_label (GTK_MENU_ITEM (battery_device->menu_item), details);
 
         /* update the image, keep track of the signal ids and the img
          * so we can disconnect it later */
         battery_device->img = gtk_image_new_from_pixbuf(battery_device->pix);
         g_object_ref (battery_device->img);
-        gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(battery_device->menu_item), battery_device->img);
+
+        /* In order to refresh the icon, we get the box inside the menuitem, and then destroy the GtkImage
+         * inside it. Then we pack the new image in its place. */
+        box = gtk_bin_get_child (GTK_BIN (battery_device->menu_item));
+        children = gtk_container_get_children (GTK_CONTAINER (box));
+        for(iter = children; iter != NULL; iter = g_list_next (iter))
+        {
+            if (GTK_IS_IMAGE (GTK_WIDGET(iter->data)))
+                gtk_widget_destroy(GTK_WIDGET(iter->data));
+        }
+        g_list_free(children);
+        gtk_box_pack_start (GTK_BOX (box), battery_device->img, FALSE, FALSE, 0);
+
         battery_device->expose_signal_id = g_signal_connect_after (G_OBJECT (battery_device->img),
-                                                                   "expose-event",
+                                                                   "draw",
                                                                    G_CALLBACK (power_manager_button_device_icon_expose),
                                                                    device);
     }
@@ -956,6 +970,8 @@ power_manager_button_press_event (GtkWidget *widget, GdkEventButton *event)
 static gboolean
 power_manager_button_size_changed_cb (XfcePanelPlugin *plugin, gint size, PowerManagerButton *button)
 {
+    GtkStyleContext *ctx;
+    GtkBorder padding, border;
     gint width;
     gint xthickness;
     gint ythickness;
@@ -963,8 +979,12 @@ power_manager_button_size_changed_cb (XfcePanelPlugin *plugin, gint size, PowerM
     g_return_val_if_fail (POWER_MANAGER_IS_BUTTON (button), FALSE);
     g_return_val_if_fail (XFCE_IS_PANEL_PLUGIN (plugin), FALSE);
 
-    xthickness = gtk_widget_get_style(GTK_WIDGET(button))->xthickness;
-    ythickness = gtk_widget_get_style(GTK_WIDGET(button))->ythickness;
+    ctx = gtk_widget_get_style_context (GTK_WIDGET (button));
+    gtk_style_context_get_padding (ctx, gtk_widget_get_state_flags (GTK_WIDGET (button)), &padding);
+    gtk_style_context_get_border (ctx, gtk_widget_get_state_flags (GTK_WIDGET (button)), &border);
+    xthickness = padding.left+padding.right+border.left+border.right;
+    ythickness = padding.top+padding.bottom+border.top+border.bottom;
+
     size /= xfce_panel_plugin_get_nrows (plugin);
     width = size - 2* MAX (xthickness, ythickness);
 
@@ -977,7 +997,7 @@ power_manager_button_size_changed_cb (XfcePanelPlugin *plugin, gint size, PowerM
 static void
 power_manager_button_style_set_cb (XfcePanelPlugin *plugin, GtkStyle *prev_style, PowerManagerButton *button)
 {
-    gtk_widget_reset_rc_styles (GTK_WIDGET (plugin));
+    gtk_widget_reset_style (GTK_WIDGET (plugin));
     power_manager_button_size_changed_cb (plugin, xfce_panel_plugin_get_size (plugin), button);
 }
 
@@ -1014,7 +1034,7 @@ power_manager_button_show (PowerManagerButton *button)
     gtk_container_add (GTK_CONTAINER (button), button->priv->panel_icon_image);
 
     /* help dialog */
-    mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_HELP, NULL);
+    mi = gtk_menu_item_new_with_mnemonic (_("_Help"));
     gtk_widget_set_sensitive (mi, TRUE);
     gtk_widget_show (mi);
     g_signal_connect (mi, "activate", G_CALLBACK (help_cb), button);
@@ -1050,7 +1070,7 @@ menu_destroyed_cb(GtkMenuShell *menu, gpointer user_data)
     button->priv->range = NULL;
 
     /* untoggle panel icon */
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button), FALSE);
 
     button->priv->menu = NULL;
 }
@@ -1095,7 +1115,7 @@ menu_item_activate_cb(GtkWidget *object, gpointer user_data)
 static gboolean
 power_manager_button_menu_add_device (PowerManagerButton *button, BatteryDevice *battery_device, gboolean append)
 {
-    GtkWidget *mi, *label;
+    GtkWidget *mi, *label, *box;
     guint type = 0;
 
     g_return_val_if_fail (POWER_MANAGER_IS_BUTTON (button), FALSE);
@@ -1117,21 +1137,25 @@ power_manager_button_menu_add_device (PowerManagerButton *button, BatteryDevice
         }
     }
 
-    mi = gtk_image_menu_item_new_with_label(battery_device->details);
-    /* Make the menu item be bold and multi-line */
-    label = gtk_bin_get_child(GTK_BIN(mi));
-    gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
-
+    box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
     /* add the image */
-    battery_device->img = gtk_image_new_from_pixbuf(battery_device->pix);
+    battery_device->img = gtk_image_new_from_pixbuf (battery_device->pix);
     g_object_ref (battery_device->img);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(mi), battery_device->img);
+
+    mi = gtk_menu_item_new ();
+    /* Make the menu item be bold and multi-line */
+    label = gtk_label_new (battery_device->details);
+    gtk_label_set_use_markup (GTK_LABEL(label), TRUE);
+
+    gtk_box_pack_start (GTK_BOX (box), GTK_WIDGET (battery_device->img), FALSE, FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (mi), box);
 
     /* keep track of the menu item in the battery_device so we can update it */
     battery_device->menu_item = mi;
     g_signal_connect(G_OBJECT(mi), "destroy", G_CALLBACK(menu_item_destroyed_cb), button);
     battery_device->expose_signal_id = g_signal_connect_after (G_OBJECT (battery_device->img),
-                                                               "expose-event",
+                                                               "draw",
                                                                G_CALLBACK (power_manager_button_device_icon_expose),
                                                                battery_device->device);
 
@@ -1139,7 +1163,7 @@ power_manager_button_menu_add_device (PowerManagerButton *button, BatteryDevice
     g_signal_connect(G_OBJECT(mi), "activate", G_CALLBACK(menu_item_activate_cb), button);
 
     /* Add it to the menu */
-    gtk_widget_show(mi);
+    gtk_widget_show_all(mi);
     if (append)
 	gtk_menu_shell_append(GTK_MENU_SHELL(button->priv->menu), mi);
     else
@@ -1200,7 +1224,7 @@ brightness_set_level_with_timeout (PowerManagerButton *button)
 
     xfpm_brightness_get_level (button->priv->brightness, &hw_level);
 
-    if ( hw_level != range_level )
+    if (hw_level != range_level)
     {
         xfpm_brightness_set_level (button->priv->brightness, range_level);
     }
@@ -1245,12 +1269,15 @@ range_scroll_cb (GtkWidget *widget, GdkEvent *event, PowerManagerButton *button)
 static void
 range_show_cb (GtkWidget *widget, PowerManagerButton *button)
 {
+    GdkDeviceManager* manager = gdk_display_get_device_manager(gdk_display_get_default());
+    GdkDevice* pointer = gdk_device_manager_get_client_pointer (manager);
     TRACE("entering");
-    /* Release these grabs they will cause a lockup if pkexec is called
+    /* Release these grabs as they will cause a lockup if pkexec is called
      * for the brightness helper */
-    gdk_pointer_ungrab(GDK_CURRENT_TIME);
-    gdk_keyboard_ungrab(GDK_CURRENT_TIME);
-    gtk_grab_remove(widget);
+    if (pointer)
+        gdk_device_ungrab(pointer, GDK_CURRENT_TIME);
+
+    gtk_grab_remove (widget);
 }
 
 void
@@ -1300,6 +1327,7 @@ power_manager_button_show_menu (PowerManagerButton *button)
     if ( xfpm_brightness_has_hw (button->priv->brightness) )
     {
         GdkPixbuf *pix;
+        GtkWidget *box;
 
         max_level = xfpm_brightness_get_max_level (button->priv->brightness);
 
@@ -1313,18 +1341,20 @@ power_manager_button_show_menu (PowerManagerButton *button)
                                        NULL);
         if (pix)
         {
+            /* Pack the image into the box inside the GtkMenuItem. */
+            box = gtk_bin_get_child (GTK_BIN (mi));
             img = gtk_image_new_from_pixbuf (pix);
-            gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM(mi), img);
+            gtk_box_pack_start (GTK_BOX (box), img, FALSE, FALSE, 0);
         }
 
-        scale_menu_item_set_description_label (SCALE_MENU_ITEM(mi), _("<b>Display brightness</b>"));
+        scale_menu_item_set_description_label (SCALE_MENU_ITEM (mi), _("<b>Display brightness</b>"));
 
         /* range slider */
         button->priv->range = scale_menu_item_get_scale (SCALE_MENU_ITEM (mi));
 
         /* update the slider to the current brightness level */
         xfpm_brightness_get_level (button->priv->brightness, &current_level);
-        gtk_range_set_value (GTK_RANGE(button->priv->range), current_level);
+        gtk_range_set_value (GTK_RANGE (button->priv->range), current_level);
 
         g_signal_connect_swapped (mi, "value-changed", G_CALLBACK (range_value_changed_cb), button);
         g_signal_connect (mi, "scroll-event", G_CALLBACK (range_scroll_cb), button);
diff --git a/panel-plugins/power-manager-plugin/scalemenuitem.c b/panel-plugins/power-manager-plugin/scalemenuitem.c
index 5d9faab..74977c8 100644
--- a/panel-plugins/power-manager-plugin/scalemenuitem.c
+++ b/panel-plugins/power-manager-plugin/scalemenuitem.c
@@ -61,6 +61,7 @@ struct _ScaleMenuItemPrivate {
   GtkWidget            *percentage_label;
   GtkWidget            *vbox;
   GtkWidget            *hbox;
+  GtkWidget            *master_hbox;
   gboolean              grabbed;
   gboolean              ignore_value_changed;
 };
@@ -79,7 +80,7 @@ enum {
 
 static guint signals[LAST_SIGNAL] = { 0 };
 
-G_DEFINE_TYPE (ScaleMenuItem, scale_menu_item, GTK_TYPE_IMAGE_MENU_ITEM)
+G_DEFINE_TYPE (ScaleMenuItem, scale_menu_item, GTK_TYPE_MENU_ITEM)
 
 #define GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_SCALE_MENU_ITEM, ScaleMenuItemPrivate))
 
@@ -176,21 +177,31 @@ static void
 update_packing (ScaleMenuItem *self)
 {
   ScaleMenuItemPrivate *priv = GET_PRIVATE (self);
-  GtkBox *hbox = GTK_BOX (gtk_hbox_new (FALSE, 0));
-  GtkBox *vbox = GTK_BOX (gtk_vbox_new (FALSE, 0));
+  GtkWidget *hbox; //= gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+  GtkWidget *vbox; //= gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+  GtkWidget *master_hbox;
 
   TRACE("entering");
 
+  master_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+
   if(priv->hbox)
     remove_children (GTK_CONTAINER (priv->hbox));
   if(priv->vbox)
   {
     remove_children (GTK_CONTAINER (priv->vbox));
-    gtk_container_remove (GTK_CONTAINER (self), priv->vbox);
+  }
+  if(priv->master_hbox)
+  {
+    remove_children (GTK_CONTAINER (priv->master_hbox));
+    gtk_container_remove (GTK_CONTAINER (self), priv->master_hbox);
   }
 
-  priv->hbox = GTK_WIDGET(hbox);
-  priv->vbox = GTK_WIDGET(vbox);
+  priv->hbox = GTK_WIDGET (hbox);
+  priv->vbox = GTK_WIDGET (vbox);
+  priv->master_hbox = GTK_WIDGET (master_hbox);
 
   /* add the new layout */
   if (priv->description_label && priv->percentage_label)
@@ -198,39 +209,41 @@ update_packing (ScaleMenuItem *self)
       /* [IC]  Description
        * [ON]  <----slider----> [percentage]%
        */
-      gtk_box_pack_start (vbox, priv->description_label, FALSE, FALSE, 0);
-      gtk_box_pack_start (vbox, priv->hbox, TRUE, TRUE, 0);
-      gtk_box_pack_start (hbox, priv->scale, TRUE, TRUE, 0);
-      gtk_box_pack_start (hbox, priv->percentage_label, FALSE, FALSE, 0);
+      gtk_box_pack_start (GTK_BOX (vbox), priv->description_label, FALSE, FALSE, 0);
+      gtk_box_pack_start (GTK_BOX (vbox), priv->hbox, TRUE, TRUE, 0);
+      gtk_box_pack_start (GTK_BOX (hbox), priv->scale, TRUE, TRUE, 0);
+      gtk_box_pack_start (GTK_BOX (hbox), priv->percentage_label, FALSE, FALSE, 0);
   }
   else if (priv->description_label)
   {
       /* [IC]  Description
        * [ON]  <----slider---->
        */
-      gtk_box_pack_start (vbox, priv->description_label, FALSE, FALSE, 0);
-      gtk_box_pack_start (vbox, priv->hbox, TRUE, TRUE, 0);
-      gtk_box_pack_start (hbox, priv->scale, TRUE, TRUE, 0);
+      gtk_box_pack_start (GTK_BOX (vbox), priv->description_label, FALSE, FALSE, 0);
+      gtk_box_pack_start (GTK_BOX (vbox), priv->hbox, TRUE, TRUE, 0);
+      gtk_box_pack_start (GTK_BOX (hbox), priv->scale, TRUE, TRUE, 0);
   }
   else if (priv->percentage_label)
   {
       /* [ICON]  <----slider----> [percentage]%  */
-      gtk_box_pack_start (vbox, priv->hbox, TRUE, TRUE, 0);
-      gtk_box_pack_start (hbox, priv->scale, TRUE, TRUE, 0);
-      gtk_box_pack_start (hbox, priv->percentage_label, FALSE, FALSE, 0);
+      gtk_box_pack_start (GTK_BOX (vbox), priv->hbox, TRUE, TRUE, 0);
+      gtk_box_pack_start (GTK_BOX (hbox), priv->scale, TRUE, TRUE, 0);
+      gtk_box_pack_start (GTK_BOX (hbox), priv->percentage_label, FALSE, FALSE, 0);
   }
   else
   {
       /* [ICON]  <----slider---->  */
-      gtk_box_pack_start (vbox, priv->hbox, TRUE, TRUE, 0);
-      gtk_box_pack_start (hbox, priv->scale, TRUE, TRUE, 0);
+      gtk_box_pack_start (GTK_BOX (vbox), priv->hbox, TRUE, TRUE, 0);
+      gtk_box_pack_start (GTK_BOX (hbox), priv->scale, TRUE, TRUE, 0);
   }
 
+  gtk_box_pack_start (GTK_BOX (master_hbox), priv->vbox, TRUE, TRUE, 0);
 
   gtk_widget_show_all (priv->vbox);
   gtk_widget_show_all (priv->hbox);
+  gtk_widget_show_all (priv->master_hbox);
 
-  gtk_container_add (GTK_CONTAINER (self), priv->vbox);
+  gtk_container_add (GTK_CONTAINER (self), priv->master_hbox);
 }
 
 static void
@@ -396,9 +409,10 @@ scale_menu_item_new_with_range (gdouble           min,
 
   priv = GET_PRIVATE (scale_item);
 
-  priv->scale = gtk_hscale_new_with_range (min, max, step);
+  priv->scale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, min, max, step);
   priv->vbox = NULL;
   priv->hbox = NULL;
+  priv->master_hbox = NULL;
 
   g_signal_connect (priv->scale, "value-changed", G_CALLBACK (scale_menu_item_scale_value_changed), scale_item);
   g_object_ref (priv->scale);
@@ -510,7 +524,7 @@ scale_menu_item_set_description_label (ScaleMenuItem *menuitem,
       gtk_label_set_markup (GTK_LABEL (priv->description_label), label);
 
       /* align left */
-      gtk_misc_set_alignment (GTK_MISC(priv->description_label), 0, 0);
+      gtk_widget_set_halign (GTK_WIDGET (priv->description_label), GTK_ALIGN_START);
     }
 
     update_packing (menuitem);
@@ -552,7 +566,7 @@ scale_menu_item_set_percentage_label (ScaleMenuItem *menuitem,
       /* create label */
       priv->percentage_label = gtk_label_new (label);
       /* align left */
-      gtk_misc_set_alignment (GTK_MISC(priv->percentage_label), 0, 0);
+      gtk_widget_set_halign (GTK_WIDGET (priv->percentage_label), GTK_ALIGN_START);
     }
 
     update_packing (menuitem);
diff --git a/panel-plugins/power-manager-plugin/xfce/power-manager-plugin.desktop.in.in b/panel-plugins/power-manager-plugin/xfce/power-manager-plugin.desktop.in.in
index 57a719f..140dd6a 100644
--- a/panel-plugins/power-manager-plugin/xfce/power-manager-plugin.desktop.in.in
+++ b/panel-plugins/power-manager-plugin/xfce/power-manager-plugin.desktop.in.in
@@ -6,3 +6,4 @@ Icon=xfpm-primary-100-charging
 X-XFCE-Module=xfce4powermanager
 X-XFCE-Unique=TRUE
 X-XFCE-Internal=false
+X-XFCE-API=2.0
\ No newline at end of file

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


More information about the Xfce4-commits mailing list