diff --git a/garcon-gtk/garcon-gtk-menu.c b/garcon-gtk/garcon-gtk-menu.c index 72e73ac..5c2daa4 100644 --- a/garcon-gtk/garcon-gtk-menu.c +++ b/garcon-gtk/garcon-gtk-menu.c @@ -51,6 +51,7 @@ enum PROP_SHOW_TOOLTIPS, PROP_SHOW_DESKTOP_ACTIONS, PROP_RIGHT_CLICK_EDITS, + PROP_ALLOW_DND, N_PROPERTIES }; @@ -85,6 +86,7 @@ struct _GarconGtkMenuPrivate guint show_tooltips : 1; guint show_desktop_actions : 1; guint right_click_edits : 1; + guint allow_dnd : 1; }; @@ -194,6 +196,19 @@ garcon_gtk_menu_class_init (GarconGtkMenuClass *klass) FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + + /** + * GarconMenu:allow-dnd: + * + * + **/ + menu_props[PROP_ALLOW_DND] = + g_param_spec_boolean ("allow-dnd", + "allow-dnd", + "allow drag and drop of menu items", + FALSE, + G_PARAM_READWRITE + | G_PARAM_STATIC_STRINGS); /* install all properties */ g_object_class_install_properties (gobject_class, N_PROPERTIES, menu_props); @@ -211,6 +226,7 @@ garcon_gtk_menu_init (GarconGtkMenu *menu) menu->priv->show_tooltips = FALSE; menu->priv->show_desktop_actions = FALSE; menu->priv->right_click_edits = FALSE; + menu->priv->allow_dnd = TRUE; gtk_menu_set_reserve_toggle_size (GTK_MENU (menu), FALSE); } @@ -268,6 +284,10 @@ garcon_gtk_menu_get_property (GObject *object, case PROP_RIGHT_CLICK_EDITS: g_value_set_boolean (value, menu->priv->right_click_edits); break; + + case PROP_ALLOW_DND: + g_value_set_boolean (value, menu->priv->allow_dnd); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -311,6 +331,10 @@ garcon_gtk_menu_set_property (GObject *object, garcon_gtk_menu_set_right_click_edits (menu, g_value_get_boolean (value)); break; + case PROP_ALLOW_DND: + garcon_gtk_menu_set_allow_dnd (menu, g_value_get_boolean (value)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -895,15 +919,18 @@ garcon_gtk_menu_add (GarconGtkMenu *menu, gtk_widget_set_tooltip_text (mi, comment); } - /* support for dnd item to for example the xfce4-panel */ - gtk_drag_source_set (mi, GDK_BUTTON1_MASK, dnd_target_list, - G_N_ELEMENTS (dnd_target_list), GDK_ACTION_COPY); - g_signal_connect_swapped (G_OBJECT (mi), "drag-begin", - G_CALLBACK (garcon_gtk_menu_item_drag_begin), li->data); - g_signal_connect_swapped (G_OBJECT (mi), "drag-data-get", - G_CALLBACK (garcon_gtk_menu_item_drag_data_get), li->data); - g_signal_connect_swapped (G_OBJECT (mi), "drag-end", - G_CALLBACK (garcon_gtk_menu_item_drag_end), menu); + if (menu->priv->allow_dnd) + { + /* support for dnd item to for example the xfce4-panel */ + gtk_drag_source_set (mi, GDK_BUTTON1_MASK, dnd_target_list, + G_N_ELEMENTS (dnd_target_list), GDK_ACTION_COPY); + g_signal_connect_swapped (G_OBJECT (mi), "drag-begin", + G_CALLBACK (garcon_gtk_menu_item_drag_begin), li->data); + g_signal_connect_swapped (G_OBJECT (mi), "drag-data-get", + G_CALLBACK (garcon_gtk_menu_item_drag_data_get), li->data); + g_signal_connect_swapped (G_OBJECT (mi), "drag-end", + G_CALLBACK (garcon_gtk_menu_item_drag_end), menu); + } /* doesn't happen, but anyway... */ command = garcon_menu_item_get_command (li->data); @@ -1266,3 +1293,42 @@ garcon_gtk_menu_get_right_click_edits (GarconGtkMenu *menu) g_return_val_if_fail (GARCON_GTK_IS_MENU (menu), FALSE); return menu->priv->right_click_edits; } + + + +/** + * garcon_gtk_menu_set_allow_dnd: + * @menu : A #GarconGtkMenu + * + * + **/ +void +garcon_gtk_menu_set_allow_dnd (GarconGtkMenu *menu, + gboolean allow_dnd) +{ + g_return_if_fail (GARCON_GTK_IS_MENU (menu)); + + if (menu->priv->allow_dnd == allow_dnd) + return; + + menu->priv->allow_dnd = !!allow_dnd; + g_object_notify_by_pspec (G_OBJECT (menu), menu_props[PROP_ALLOW_DND]); + + garcon_gtk_menu_reload (menu); +} + + + +/** + * garcon_gtk_menu_get_allow_dnd: + * @menu : A #GarconGtkMenu + * + * Return value: if drag and drop of menu items is enabled + **/ +gboolean +garcon_gtk_menu_get_allow_dnd (GarconGtkMenu *menu) +{ + g_return_val_if_fail (GARCON_GTK_IS_MENU (menu), FALSE); + return menu->priv->allow_dnd; +} + diff --git a/garcon-gtk/garcon-gtk-menu.h b/garcon-gtk/garcon-gtk-menu.h index 2e1f84a..b99f6f7 100644 --- a/garcon-gtk/garcon-gtk-menu.h +++ b/garcon-gtk/garcon-gtk-menu.h @@ -83,6 +83,10 @@ void garcon_gtk_menu_set_right_click_edits (GarconGtkMenu *me gboolean enable_right_click_edits); gboolean garcon_gtk_menu_get_right_click_edits (GarconGtkMenu *menu); +void garcon_gtk_menu_set_allow_dnd (GarconGtkMenu *menu, + gboolean enable_allow_dnd); +gboolean garcon_gtk_menu_get_allow_dnd (GarconGtkMenu *menu); + G_END_DECLS #endif /* !__GARCON_GTK_MENU_H__ */