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

Reply via email to