[file-roller] menu action: added a show-arrow property
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [file-roller] menu action: added a show-arrow property
- Date: Thu, 6 Dec 2012 09:43:38 +0000 (UTC)
commit 282376ac753658c7a01fc6939fab6e20fa00b50b
Author: Paolo Bacchilega <paobac src gnome org>
Date: Thu Dec 6 10:17:39 2012 +0100
menu action: added a show-arrow property
src/gth-toggle-menu-action.c | 31 +++++++++++++++--
src/gth-toggle-menu-action.h | 1 +
src/gth-toggle-menu-tool-button.c | 69 +++++++++++++++++++++---------------
3 files changed, 69 insertions(+), 32 deletions(-)
---
diff --git a/src/gth-toggle-menu-action.c b/src/gth-toggle-menu-action.c
index 07bf070..2a09d60 100644
--- a/src/gth-toggle-menu-action.c
+++ b/src/gth-toggle-menu-action.c
@@ -32,12 +32,14 @@ G_DEFINE_TYPE (GthToggleMenuAction, gth_toggle_menu_action, GTK_TYPE_TOGGLE_ACTI
/* Properties */
enum {
PROP_0,
+ PROP_SHOW_ARROW,
PROP_MENU,
PROP_MENU_HALIGN
};
struct _GthToggleMenuActionPrivate {
+ gboolean show_arrow;
GtkWidget *menu;
GtkAlign menu_halign;
GthShowMenuFunc show_menu_func;
@@ -50,6 +52,7 @@ static void
gth_toggle_menu_action_init (GthToggleMenuAction *self)
{
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_TOGGLE_MENU_ACTION, GthToggleMenuActionPrivate);
+ self->priv->show_arrow = TRUE;
self->priv->menu = gtk_menu_new ();
g_object_ref_sink (self->priv->menu);
}
@@ -63,12 +66,17 @@ gth_toggle_menu_action_set_property (GObject *object,
GParamSpec *pspec)
{
GthToggleMenuAction *self = GTH_TOGGLE_MENU_ACTION (object);
+ GtkWidget *tmp;
switch (property_id) {
+ case PROP_SHOW_ARROW:
+ self->priv->show_arrow = g_value_get_boolean (value);
+ break;
case PROP_MENU:
- if (self->priv->menu != NULL)
- g_object_unref (self->priv->menu);
+ tmp = self->priv->menu;
self->priv->menu = g_value_dup_object (value);
+ g_object_unref (tmp);
+ g_object_notify (G_OBJECT (self), "menu");
break;
case PROP_MENU_HALIGN:
self->priv->menu_halign = g_value_get_enum (value);
@@ -88,6 +96,9 @@ gth_toggle_menu_action_get_property (GObject *object,
GthToggleMenuAction *self = GTH_TOGGLE_MENU_ACTION (object);
switch (property_id) {
+ case PROP_SHOW_ARROW:
+ g_value_set_boolean (value, self->priv->show_arrow);
+ break;
case PROP_MENU:
g_value_set_object (value, self->priv->menu);
break;
@@ -118,7 +129,7 @@ gth_toggle_menu_action_create_tool_item (GtkAction *action)
GtkWidget *tool_item;
tool_item = g_object_new (GTH_TYPE_TOGGLE_MENU_TOOL_BUTTON,
- "show-arrow", TRUE,
+ "show-arrow", self->priv->show_arrow,
NULL);
if (self->priv->show_menu_func != NULL)
g_signal_connect (tool_item,
@@ -170,6 +181,13 @@ gth_toggle_menu_action_class_init (GthToggleMenuActionClass *klass)
/* properties */
g_object_class_install_property (object_class,
+ PROP_SHOW_ARROW,
+ g_param_spec_boolean ("show-arrow",
+ "Show Arrow",
+ "Whether to show an arrow",
+ TRUE,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
PROP_MENU,
g_param_spec_object ("menu",
"Menu",
@@ -213,3 +231,10 @@ gth_toggle_menu_action_get_menu_halign (GthToggleMenuAction *self)
{
return self->priv->menu_halign;
}
+
+
+gboolean
+gth_toggle_menu_action_get_show_arrow (GthToggleMenuAction *self)
+{
+ return self->priv->show_arrow;
+}
diff --git a/src/gth-toggle-menu-action.h b/src/gth-toggle-menu-action.h
index 64949b0..30fa3f2 100644
--- a/src/gth-toggle-menu-action.h
+++ b/src/gth-toggle-menu-action.h
@@ -56,6 +56,7 @@ void gth_toggle_menu_action_set_show_menu_func (GthToggleMenuAction *acti
GDestroyNotify destroy);
GtkWidget * gth_toggle_menu_action_get_menu (GthToggleMenuAction *action);
GtkAlign gth_toggle_menu_action_get_menu_halign (GthToggleMenuAction *self);
+gboolean gth_toggle_menu_action_get_show_arrow (GthToggleMenuAction *self);
G_END_DECLS
diff --git a/src/gth-toggle-menu-tool-button.c b/src/gth-toggle-menu-tool-button.c
index 8c76136..9ae8177 100644
--- a/src/gth-toggle-menu-tool-button.c
+++ b/src/gth-toggle-menu-tool-button.c
@@ -159,12 +159,12 @@ gth_toggle_menu_tool_button_construct_contents (GtkToolItem *tool_item)
style = gtk_tool_item_get_toolbar_style (GTK_TOOL_ITEM (button));
if (style != GTK_TOOLBAR_TEXT) {
- if ((button->priv->stock_id != NULL) && (button->priv->icon_name != NULL))
+ if ((button->priv->stock_id != NULL) || (button->priv->icon_name != NULL))
need_icon = TRUE;
}
- if ((style == GTK_TOOLBAR_TEXT) | (style == GTK_TOOLBAR_BOTH)) {
- if ((button->priv->stock_id != NULL) && (button->priv->label_text != NULL))
+ if ((style == GTK_TOOLBAR_TEXT) || (style == GTK_TOOLBAR_BOTH)) {
+ if ((button->priv->stock_id != NULL) || (button->priv->label_text != NULL))
need_label = TRUE;
}
@@ -176,27 +176,12 @@ gth_toggle_menu_tool_button_construct_contents (GtkToolItem *tool_item)
need_label = TRUE;
}
-#if 0
- if ((style == GTK_TOOLBAR_ICONS)
- && (button->priv->icon_widget == NULL)
- && (button->priv->stock_id == NULL)
- && button->priv->icon_name == NULL)
- {
- need_label = TRUE;
- need_icon = FALSE;
- style = GTK_TOOLBAR_TEXT;
- }
-
- if ((style == GTK_TOOLBAR_TEXT)
- && (button->priv->label_widget == NULL)
- && (button->priv->stock_id == NULL)
- && (button->priv->label_text == NULL))
- {
- need_label = FALSE;
- need_icon = TRUE;
- style = GTK_TOOLBAR_ICONS;
+ if ((style == GTK_TOOLBAR_BOTH) && (! need_label || ! need_icon)) {
+ if (need_icon && ! need_label)
+ style = GTK_TOOLBAR_ICONS;
+ else if (need_label && ! need_icon)
+ style = GTK_TOOLBAR_TEXT;
}
-#endif
if (need_label) {
if (button->priv->label_widget) {
@@ -399,6 +384,21 @@ gth_toggle_menu_tool_button_style_updated (GtkWidget *widget)
static void
+gth_toggle_menu_tool_button_map (GtkWidget *widget)
+{
+ GthToggleMenuToolButton *button = GTH_TOGGLE_MENU_TOOL_BUTTON (widget);
+
+ GTK_WIDGET_CLASS (gth_toggle_menu_tool_button_parent_class)->map (widget);
+
+ if (gtk_menu_get_attach_widget (button->priv->menu) != NULL)
+ gtk_menu_detach (button->priv->menu);
+
+ g_object_set (button->priv->menu, "halign", button->priv->menu_halign, NULL);
+ g_object_set (button->priv->menu_button, "menu", button->priv->menu, NULL);
+}
+
+
+static void
gth_toggle_menu_tool_button_set_property (GObject *object,
guint prop_id,
const GValue *value,
@@ -547,10 +547,12 @@ gth_toggle_menu_tool_button_create_menu_proxy (GtkToolItem *item)
if (menu_image != NULL)
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), menu_image);
- g_object_ref (button->priv->menu);
- if (gtk_menu_get_attach_widget (button->priv->menu) != NULL)
- gtk_menu_detach (button->priv->menu);
- gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), GTK_WIDGET (button->priv->menu));
+ if (button->priv->menu != NULL) {
+ g_object_ref (button->priv->menu);
+ if (gtk_menu_get_attach_widget (button->priv->menu) != NULL)
+ gtk_menu_detach (button->priv->menu);
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), GTK_WIDGET (button->priv->menu));
+ }
gtk_tool_item_set_proxy_menu_item (item, MENU_ID, menu_item);
@@ -583,6 +585,7 @@ gth_toggle_menu_tool_button_class_init (GthToggleMenuToolButtonClass *klass)
widget_class = (GtkWidgetClass *) klass;
widget_class->state_changed = gth_toggle_menu_tool_button_state_changed;
widget_class->style_updated = gth_toggle_menu_tool_button_style_updated;
+ widget_class->map = gth_toggle_menu_tool_button_map;
tool_item_class = (GtkToolItemClass *) klass;
tool_item_class->create_menu_proxy = gth_toggle_menu_tool_button_create_menu_proxy;
@@ -712,6 +715,8 @@ gth_toggle_menu_tool_button_update (GtkActivatable *activatable,
if (! GTK_IS_TOGGLE_ACTION (action))
return;
+ g_print ("property name: %s\n", property_name);
+
button = GTH_TOGGLE_MENU_TOOL_BUTTON (activatable);
if (strcmp (property_name, "active") == 0) {
@@ -735,6 +740,9 @@ gth_toggle_menu_tool_button_update (GtkActivatable *activatable,
else if (strcmp (property_name, "menu-halign") == 0) {
gth_toggle_menu_tool_button_set_menu_halign (button, gth_toggle_menu_action_get_menu_halign (GTH_TOGGLE_MENU_ACTION (action)));
}
+ else if (strcmp (property_name, "show-arrow") == 0) {
+ gth_toggle_menu_tool_button_set_show_arrow (button, gth_toggle_menu_action_get_show_arrow (GTH_TOGGLE_MENU_ACTION (action)));
+ }
}
}
@@ -963,9 +971,12 @@ gth_toggle_menu_tool_button_set_menu (GthToggleMenuToolButton *button,
if ((button->priv->menu != NULL) && gtk_widget_get_visible (GTK_WIDGET (button->priv->menu)))
gtk_menu_shell_deactivate (GTK_MENU_SHELL (button->priv->menu));
- button->priv->menu = GTK_MENU (menu);
if (button->priv->menu != NULL)
- g_object_add_weak_pointer (G_OBJECT (button->priv->menu), (gpointer *) &button->priv->menu);
+ g_object_unref (button->priv->menu);
+ button->priv->menu = g_object_ref (menu);
+
+ if (gtk_menu_get_attach_widget (button->priv->menu) != NULL)
+ gtk_menu_detach (button->priv->menu);
g_object_set (button->priv->menu, "halign", button->priv->menu_halign, NULL);
g_object_set (button->priv->menu_button, "menu", button->priv->menu, NULL);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]