diff options
author | Simon Steinbeiss <simon.steinbeiss@elfenbeinturm.at> | 2015-03-03 19:56:37 +0300 |
---|---|---|
committer | Eric Koegel <eric.koegel@gmail.com> | 2015-03-22 14:52:51 +0300 |
commit | 53b58d0ff6d73fa513861cb45ab8050610af580b (patch) | |
tree | 1b66d602086531737b0a905e903692e7ff6f4a62 /panel-plugins | |
parent | 67eb80579fb662e29596611d6428aec43b5876e9 (diff) | |
download | ixfce4-power-manager-53b58d0ff6d73fa513861cb45ab8050610af580b.tar.gz |
Start porting the panel-plugin to Gtk3
Diffstat (limited to 'panel-plugins')
3 files changed, 93 insertions, 48 deletions
diff --git a/panel-plugins/power-manager-plugin/power-manager-button.c b/panel-plugins/power-manager-plugin/power-manager-button.c index d5fef444..874a100b 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, ¤t_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 5d9faaba..74977c87 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 57a719f3..140dd6a5 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 |