[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