This is an automated email from the git hooks/post-receive script. nomad pushed a commit to branch master in repository apps/xfdashboard.
commit 90a6f548859fdafebd92dd8278b5a821253b291d Author: Stephan Haller <no...@froevel.de> Date: Tue Jan 17 08:59:25 2017 +0100 Allow pop-up menu items to be enabled or disabled. At the moment only the item "activation" function checks if the pop-up menu item is enabled before activating it. --- libxfdashboard/popup-menu-item.c | 113 +++++++++++++++++++++++++++++++++++---- libxfdashboard/popup-menu-item.h | 11 +++- 2 files changed, 113 insertions(+), 11 deletions(-) diff --git a/libxfdashboard/popup-menu-item.c b/libxfdashboard/popup-menu-item.c index 609692c..4e5b2e1 100644 --- a/libxfdashboard/popup-menu-item.c +++ b/libxfdashboard/popup-menu-item.c @@ -54,6 +54,27 @@ static guint XfdashboardPopupMenuItemSignals[SIGNAL_LAST]={ 0, }; G_OBJECT_TYPE_NAME(self), \ vfunc); +/* Default implementation of virtual function "get_enabled" */ +static gboolean _xfdashboard_popup_menu_item_real_get_enabled(XfdashboardPopupMenuItem *self) +{ + gboolean enabled; + + g_return_val_if_fail(XFDASHBOARD_IS_POPUP_MENU_ITEM(self), FALSE); + + /* By default (if not overidden) retrieve state from property "enabled" */ + g_object_get(self, "enabled", &enabled, NULL); + + return(enabled); +} + +/* Default implementation of virtual function "set_enabled" */ +static void _xfdashboard_popup_menu_item_real_set_enabled(XfdashboardPopupMenuItem *self, gboolean inEnabled) +{ + g_return_if_fail(XFDASHBOARD_IS_POPUP_MENU_ITEM(self)); + + /* By default (if not overidden) set property "enabled" to requested state */ + g_object_set(self, "enabled", inEnabled, NULL); +} /* IMPLEMENTATION: GObject */ @@ -63,19 +84,31 @@ static guint XfdashboardPopupMenuItemSignals[SIGNAL_LAST]={ 0, }; void xfdashboard_popup_menu_item_default_init(XfdashboardPopupMenuItemInterface *iface) { static gboolean initialized=FALSE; - // TODO: GParamSpec *property; + GParamSpec *property; - /* Define properties */ - // TODO: property=g_param_spec_boolean("enabled", - // TODO: _("Enabled"), - // TODO: _("Whether this pop-up menu item is enabled"), - // TODO: TRUE, - // TODO: G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); - // TODO: g_object_interface_install_property(iface, property); + /* The following virtual functions should be overriden if default + * implementation does not fit. + */ + iface->get_enabled=_xfdashboard_popup_menu_item_real_get_enabled; + iface->set_enabled=_xfdashboard_popup_menu_item_real_set_enabled; - /* Define signals and actions */ + /* Define properties, signals and actions */ if(!initialized) { + /* Define properties */ + /** + * XfdashboardPopupMenuItem:enabled: + * + * A flag indicating if this pop-up menu item is enabled or disabled. + * It is set to %TRUE if enabled and it is set %FALSE if disabled. + */ + property=g_param_spec_boolean("enabled", + _("Enabled"), + _("Whether this pop-up menu item is enabled"), + TRUE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + g_object_interface_install_property(iface, property); + /* Define signals */ /** * XfdashboardPopupMenuItem::activated: @@ -103,6 +136,65 @@ void xfdashboard_popup_menu_item_default_init(XfdashboardPopupMenuItemInterface /* IMPLEMENTATION: Public API */ /** + * xfdashboard_popup_menu_item_get_enabled: + * @self: A #XfdashboardPopupMenuItem + * + * Retrieves the state of pop-up menu item at @self if it is enabled or disabled. + * If %TRUE is returned this item is enabled and can be selected, focused and + * activated. If this item is disabled, %FALSE is returned and it is not possible + * to interact with this item. + * + * Return value: %TRUE if pop-up menu item at @self is enabled and %FALSE if disabled + */ +gboolean xfdashboard_popup_menu_item_get_enabled(XfdashboardPopupMenuItem *self) +{ + XfdashboardPopupMenuItemInterface *iface; + + g_return_val_if_fail(XFDASHBOARD_IS_POPUP_MENU_ITEM(self), FALSE); + + iface=XFDASHBOARD_POPUP_MENU_ITEM_GET_IFACE(self); + + /* Call virtual function */ + if(iface->get_enabled) + { + return(iface->get_enabled(self)); + } + + /* If we get here the virtual function was not overridden */ + XFDASHBOARD_POPUP_MENU_ITEM_WARN_NOT_IMPLEMENTED(self, "get_enabled"); + return(FALSE); +} + +/** + * xfdashboard_popup_menu_item_set_enabled: + * @self: A #XfdashboardPopupMenuItem + * @inEnabled: A boolean flag if this pop-up menu item should be enabled or disabled + * + * Sets the state of pop-up menu item at @self to the state at @inEnabled. + * If @inEnabled is %TRUE this item will be enabled and will be selectable, focusable + * and activatable. If @inEnabled is %FALSE this item will be disabled and it will + * not possible to interact with this item. + */ +void xfdashboard_popup_menu_item_set_enabled(XfdashboardPopupMenuItem *self, gboolean inEnabled) +{ + XfdashboardPopupMenuItemInterface *iface; + + g_return_if_fail(XFDASHBOARD_IS_POPUP_MENU_ITEM(self)); + + iface=XFDASHBOARD_POPUP_MENU_ITEM_GET_IFACE(self); + + /* Call virtual function */ + if(iface->set_enabled) + { + iface->set_enabled(self, inEnabled); + return; + } + + /* If we get here the virtual function was not overridden */ + XFDASHBOARD_POPUP_MENU_ITEM_WARN_NOT_IMPLEMENTED(self, "set_enabled"); +} + +/** * xfdashboard_popup_menu_item_activate: * @self: A #XfdashboardPopupMenuItem * @@ -112,7 +204,8 @@ void xfdashboard_popup_menu_item_activate(XfdashboardPopupMenuItem *self) { g_return_if_fail(XFDASHBOARD_IS_POPUP_MENU_ITEM(self)); - // TODO: Check if popup menu item is enabled and return if disabled + /* Check if popup menu item is enabled and return if disabled */ + if(!xfdashboard_popup_menu_item_get_enabled(self)) return; /* Emit signal for activation */ g_signal_emit(self, XfdashboardPopupMenuItemSignals[SIGNAL_ACTIVATED], 0); diff --git a/libxfdashboard/popup-menu-item.h b/libxfdashboard/popup-menu-item.h index 05ce2d8..0490028 100644 --- a/libxfdashboard/popup-menu-item.h +++ b/libxfdashboard/popup-menu-item.h @@ -42,8 +42,12 @@ typedef struct _XfdashboardPopupMenuItemInterface XfdashboardPopupMenuItemInter /** * XfdashboardPopupMenuItemInterface: + * @parent_interface: The parent interface. + * @get_enabled: Retrieve state if pop-up menu item is enabled or disabled + * @set_enabled: Set state if pop-up menu item is enabled or disabled * - * The #XfdashboardPopupMenuItemInterface structure contains only private data + * Provides an interface implemented by actors which will be used as pop-up menu + * items in a #XfdashboardPopupMenu. */ struct _XfdashboardPopupMenuItemInterface { @@ -53,11 +57,16 @@ struct _XfdashboardPopupMenuItemInterface /*< public >*/ /* Virtual functions */ + gboolean (*get_enabled)(XfdashboardPopupMenuItem *self); + void (*set_enabled)(XfdashboardPopupMenuItem *self, gboolean inEnabled); }; /* Public API */ GType xfdashboard_popup_menu_item_get_type(void) G_GNUC_CONST; +gboolean xfdashboard_popup_menu_item_get_enabled(XfdashboardPopupMenuItem *self); +void xfdashboard_popup_menu_item_set_enabled(XfdashboardPopupMenuItem *self, gboolean inEnabled); + void xfdashboard_popup_menu_item_activate(XfdashboardPopupMenuItem *self); G_END_DECLS -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits