[Xfce4-commits] [apps/xfdashboard] 01/03: Add a yet very simple menu item separator via class XfdashboardPopupMenuItemSeparator

noreply at xfce.org noreply at xfce.org
Thu Jan 5 12:02:54 CET 2017


This is an automated email from the git hooks/post-receive script.

nomad pushed a commit to branch master
in repository apps/xfdashboard.

commit 720f677e5802561c2e6d67c4457b813a0c10c59b
Author: Stephan Haller <nomad at froevel.de>
Date:   Thu Jan 5 11:54:20 2017 +0100

    Add a yet very simple menu item separator via class XfdashboardPopupMenuItemSeparator
---
 libxfdashboard/Makefile.am                 |   2 +
 libxfdashboard/popup-menu-item-separator.c | 143 +++++++++++++++++++++++++++++
 libxfdashboard/popup-menu-item-separator.h |  84 +++++++++++++++++
 libxfdashboard/popup-menu.c                |   1 -
 libxfdashboard/quicklaunch.c               |  10 +-
 5 files changed, 237 insertions(+), 3 deletions(-)

diff --git a/libxfdashboard/Makefile.am b/libxfdashboard/Makefile.am
index 2733d23..3fa5375 100644
--- a/libxfdashboard/Makefile.am
+++ b/libxfdashboard/Makefile.am
@@ -59,6 +59,7 @@ libxfdashboard_la_headers = \
 	popup-menu.h \
 	popup-menu-item.h \
 	popup-menu-item-button.h \
+	popup-menu-item-separator.h \
 	quicklaunch.h \
 	scaled-table-layout.h \
 	scrollbar.h \
@@ -130,6 +131,7 @@ libxfdashboard_la_SOURCES = \
 	popup-menu.c \
 	popup-menu-item.c \
 	popup-menu-item-button.c \
+	popup-menu-item-separator.c \
 	quicklaunch.c \
 	scaled-table-layout.c \
 	scrollbar.c \
diff --git a/libxfdashboard/popup-menu-item-separator.c b/libxfdashboard/popup-menu-item-separator.c
new file mode 100644
index 0000000..a11393a
--- /dev/null
+++ b/libxfdashboard/popup-menu-item-separator.c
@@ -0,0 +1,143 @@
+/*
+ * popup-menu-item-separator: A separator menu item
+ * 
+ * Copyright 2012-2016 Stephan Haller <nomad at froevel.de>
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ * 
+ * 
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <libxfdashboard/popup-menu-item-separator.h>
+
+#include <glib/gi18n-lib.h>
+
+#include <libxfdashboard/popup-menu-item.h>
+#include <libxfdashboard/click-action.h>
+#include <libxfdashboard/compat.h>
+
+
+/* Define this class in GObject system */
+static void _xfdashboard_popup_menu_item_separator_popup_menu_item_iface_init(XfdashboardPopupMenuItemInterface *iface);
+
+G_DEFINE_TYPE_WITH_CODE(XfdashboardPopupMenuItemSeparator,
+						xfdashboard_popup_menu_item_separator,
+						XFDASHBOARD_TYPE_ACTOR,
+						G_IMPLEMENT_INTERFACE(XFDASHBOARD_TYPE_POPUP_MENU_ITEM, _xfdashboard_popup_menu_item_separator_popup_menu_item_iface_init))
+
+/* Private structure - access only by public API if needed */
+#define XFDASHBOARD_BUTTON_GET_PRIVATE(obj) \
+	(G_TYPE_INSTANCE_GET_PRIVATE((obj), XFDASHBOARD_TYPE_POPUP_MENU_ITEM_SEPARATOR, XfdashboardPopupMenuItemSeparatorPrivate))
+
+struct _XfdashboardPopupMenuItemSeparatorPrivate
+{
+	/* Instance related */
+	gint				minHeight;
+};
+
+/* IMPLEMENTATION: Private variables and methods */
+
+
+/* IMPLEMENTATION: Interface XfdashboardPopupMenuItem */
+
+/* Interface initialization
+ * Set up default functions
+ */
+void _xfdashboard_popup_menu_item_separator_popup_menu_item_iface_init(XfdashboardPopupMenuItemInterface *iface)
+{
+}
+
+/* IMPLEMENTATION: ClutterActor */
+
+/* Get preferred width/height */
+static void _xfdashboard_popup_menu_item_separator_get_preferred_height(ClutterActor *inActor,
+																		gfloat inForWidth,
+																		gfloat *outMinHeight,
+																		gfloat *outNaturalHeight)
+{
+	XfdashboardPopupMenuItemSeparator			*self=XFDASHBOARD_POPUP_MENU_ITEM_SEPARATOR(inActor);
+	XfdashboardPopupMenuItemSeparatorPrivate	*priv=self->priv;
+	gfloat										minHeight, naturalHeight;
+
+	minHeight=naturalHeight=priv->minHeight;
+
+	/* Store sizes computed */
+	if(outMinHeight) *outMinHeight=minHeight;
+	if(outNaturalHeight) *outNaturalHeight=naturalHeight;
+}
+
+static void _xfdashboard_popup_menu_item_separator_get_preferred_width(ClutterActor *inActor,
+																		gfloat inForHeight,
+																		gfloat *outMinWidth,
+																		gfloat *outNaturalWidth)
+{
+	XfdashboardPopupMenuItemSeparator			*self=XFDASHBOARD_POPUP_MENU_ITEM_SEPARATOR(inActor);
+	XfdashboardPopupMenuItemSeparatorPrivate	*priv=self->priv;
+	gfloat										minWidth, naturalWidth;
+
+	minWidth=naturalWidth=0.0f;
+
+	/* Store sizes computed */
+	if(outMinWidth) *outMinWidth=minWidth;
+	if(outNaturalWidth) *outNaturalWidth=naturalWidth;
+}
+
+/* IMPLEMENTATION: GObject */
+
+/* Class initialization
+ * Override functions in parent classes and define properties
+ * and signals
+ */
+static void xfdashboard_popup_menu_item_separator_class_init(XfdashboardPopupMenuItemSeparatorClass *klass)
+{
+	ClutterActorClass		*clutterActorClass=CLUTTER_ACTOR_CLASS(klass);
+
+	/* Override functions */
+	clutterActorClass->get_preferred_width=_xfdashboard_popup_menu_item_separator_get_preferred_width;
+	clutterActorClass->get_preferred_height=_xfdashboard_popup_menu_item_separator_get_preferred_height;
+
+	/* Set up private structure */
+	g_type_class_add_private(klass, sizeof(XfdashboardPopupMenuItemSeparatorPrivate));
+}
+
+/* Object initialization
+ * Create private structure and set up default values
+ */
+static void xfdashboard_popup_menu_item_separator_init(XfdashboardPopupMenuItemSeparator *self)
+{
+	XfdashboardPopupMenuItemSeparatorPrivate	*priv;
+
+	priv=self->priv=XFDASHBOARD_BUTTON_GET_PRIVATE(self);
+
+	/* Set up default values */
+	priv->minHeight=4.0f;
+
+	/* This actor cannot reacts on events */
+	clutter_actor_set_reactive(CLUTTER_ACTOR(self), FALSE);
+}
+
+/* IMPLEMENTATION: Public API */
+
+/* Create new actor */
+ClutterActor* xfdashboard_popup_menu_item_separator_new(void)
+{
+	return(g_object_new(XFDASHBOARD_TYPE_POPUP_MENU_ITEM_SEPARATOR,
+						NULL));
+}
diff --git a/libxfdashboard/popup-menu-item-separator.h b/libxfdashboard/popup-menu-item-separator.h
new file mode 100644
index 0000000..bd39685
--- /dev/null
+++ b/libxfdashboard/popup-menu-item-separator.h
@@ -0,0 +1,84 @@
+/*
+ * popup-menu-item-separator: A separator menu item
+ * 
+ * Copyright 2012-2016 Stephan Haller <nomad at froevel.de>
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ * 
+ * 
+ */
+
+#ifndef __LIBXFDASHBOARD_POPUP_MENU_ITEM_SEPARATOR__
+#define __LIBXFDASHBOARD_POPUP_MENU_ITEM_SEPARATOR__
+
+#if !defined(__LIBXFDASHBOARD_H_INSIDE__) && !defined(LIBXFDASHBOARD_COMPILATION)
+#error "Only <libxfdashboard/libxfdashboard.h> can be included directly."
+#endif
+
+#include <libxfdashboard/actor.h>
+
+G_BEGIN_DECLS
+
+#define XFDASHBOARD_TYPE_POPUP_MENU_ITEM_SEPARATOR				(xfdashboard_popup_menu_item_separator_get_type())
+#define XFDASHBOARD_POPUP_MENU_ITEM_SEPARATOR(obj)				(G_TYPE_CHECK_INSTANCE_CAST((obj), XFDASHBOARD_TYPE_POPUP_MENU_ITEM_SEPARATOR, XfdashboardPopupMenuItemSeparator))
+#define XFDASHBOARD_IS_POPUP_MENU_ITEM_SEPARATOR(obj)			(G_TYPE_CHECK_INSTANCE_TYPE((obj), XFDASHBOARD_TYPE_POPUP_MENU_ITEM_SEPARATOR))
+#define XFDASHBOARD_POPUP_MENU_ITEM_SEPARATOR_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST((klass), XFDASHBOARD_TYPE_POPUP_MENU_ITEM_SEPARATOR, XfdashboardPopupMenuItemSeparatorClass))
+#define XFDASHBOARD_IS_POPUP_MENU_ITEM_SEPARATOR_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE((klass), XFDASHBOARD_TYPE_POPUP_MENU_ITEM_SEPARATOR))
+#define XFDASHBOARD_POPUP_MENU_ITEM_SEPARATOR_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS((obj), XFDASHBOARD_TYPE_POPUP_MENU_ITEM_SEPARATOR, XfdashboardPopupMenuItemSeparatorClass))
+
+typedef struct _XfdashboardPopupMenuItemSeparator				XfdashboardPopupMenuItemSeparator;
+typedef struct _XfdashboardPopupMenuItemSeparatorClass			XfdashboardPopupMenuItemSeparatorClass;
+typedef struct _XfdashboardPopupMenuItemSeparatorPrivate		XfdashboardPopupMenuItemSeparatorPrivate;
+
+/**
+ * XfdashboardPopupMenuItemSeparator:
+ *
+ * The #XfdashboardPopupMenuItemSeparator structure contains only private data and
+ * should be accessed using the provided API
+ */
+struct _XfdashboardPopupMenuItemSeparator
+{
+	/*< private >*/
+	/* Parent instance */
+	XfdashboardActor								parent_instance;
+
+	/* Private structure */
+	XfdashboardPopupMenuItemSeparatorPrivate		*priv;
+};
+
+/**
+ * XfdashboardPopupMenuItemSeparatorClass:
+ *
+ * The #XfdashboardPopupMenuItemSeparatorClass structure contains only private data
+ */
+struct _XfdashboardPopupMenuItemSeparatorClass
+{
+	/*< private >*/
+	/* Parent class */
+	XfdashboardActorClass							parent_class;
+
+	/*< public >*/
+	/* Virtual functions */
+};
+
+/* Public API */
+GType xfdashboard_popup_menu_item_separator_get_type(void) G_GNUC_CONST;
+
+ClutterActor* xfdashboard_popup_menu_item_separator_new(void);
+
+G_END_DECLS
+
+#endif	/* __LIBXFDASHBOARD_POPUP_MENU_ITEM_SEPARATOR__ */
diff --git a/libxfdashboard/popup-menu.c b/libxfdashboard/popup-menu.c
index 3d598c9..82a9c2f 100644
--- a/libxfdashboard/popup-menu.c
+++ b/libxfdashboard/popup-menu.c
@@ -1129,7 +1129,6 @@ static void xfdashboard_popup_menu_init(XfdashboardPopupMenu *self)
 	/* Set up items container which will hold all menu items */
 	layout=xfdashboard_box_layout_new();
 	clutter_box_layout_set_orientation(CLUTTER_BOX_LAYOUT(layout), CLUTTER_ORIENTATION_VERTICAL);
-	clutter_box_layout_set_homogeneous(CLUTTER_BOX_LAYOUT(layout), TRUE);
 
 	priv->itemsContainer=xfdashboard_actor_new();
 	clutter_actor_set_x_expand(priv->itemsContainer, TRUE);
diff --git a/libxfdashboard/quicklaunch.c b/libxfdashboard/quicklaunch.c
index 6d890b4..2a30e53 100644
--- a/libxfdashboard/quicklaunch.c
+++ b/libxfdashboard/quicklaunch.c
@@ -50,6 +50,7 @@
 #include <libxfdashboard/click-action.h>
 #include <libxfdashboard/popup-menu.h>
 #include <libxfdashboard/popup-menu-item-button.h>
+#include <libxfdashboard/popup-menu-item-separator.h>
 #include <libxfdashboard/utils.h>
 #include <libxfdashboard/compat.h>
 
@@ -750,7 +751,10 @@ static void _xfdashboard_quicklaunch_on_favourite_popup_menu(XfdashboardQuicklau
 				if(windowWorkspace!=activeWorkspace &&
 					!separatorAdded)
 				{
-					// TODO: xfdashboard_popup_menu_add_separator(XFDASHBOARD_POPUP_MENU(popup));
+					menuItem=xfdashboard_popup_menu_item_separator_new();
+					clutter_actor_set_x_expand(menuItem, TRUE);
+					xfdashboard_popup_menu_add_item(XFDASHBOARD_POPUP_MENU(popup), XFDASHBOARD_POPUP_MENU_ITEM(menuItem));
+
 					separatorAdded=TRUE;
 				}
 
@@ -767,7 +771,9 @@ static void _xfdashboard_quicklaunch_on_favourite_popup_menu(XfdashboardQuicklau
 			}
 
 			/* Add a separator to split windows from other actions in pop-up menu */
-			// TODO: xfdashboard_popup_menu_add_separator(XFDASHBOARD_POPUP_MENU(popup));
+			menuItem=xfdashboard_popup_menu_item_separator_new();
+			clutter_actor_set_x_expand(menuItem, TRUE);
+			xfdashboard_popup_menu_add_item(XFDASHBOARD_POPUP_MENU(popup), XFDASHBOARD_POPUP_MENU_ITEM(menuItem));
 
 			/* Release allocated resources */
 			g_list_free(sortedList);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list