summaryrefslogtreecommitdiff
path: root/panel-plugins
diff options
context:
space:
mode:
authorSimon Steinbeiss <simon.steinbeiss@elfenbeinturm.at>2015-03-03 19:56:37 +0300
committerEric Koegel <eric.koegel@gmail.com>2015-03-22 14:52:51 +0300
commit53b58d0ff6d73fa513861cb45ab8050610af580b (patch)
tree1b66d602086531737b0a905e903692e7ff6f4a62 /panel-plugins
parent67eb80579fb662e29596611d6428aec43b5876e9 (diff)
downloadixfce4-power-manager-53b58d0ff6d73fa513861cb45ab8050610af580b.tar.gz
Start porting the panel-plugin to Gtk3
Diffstat (limited to 'panel-plugins')
-rw-r--r--panel-plugins/power-manager-plugin/power-manager-button.c82
-rw-r--r--panel-plugins/power-manager-plugin/scalemenuitem.c58
-rw-r--r--panel-plugins/power-manager-plugin/xfce/power-manager-plugin.desktop.in.in1
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, &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 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