[gtk/wip/kill-menu: 4/6] menutoolbutton: Add support for popovers
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/kill-menu: 4/6] menutoolbutton: Add support for popovers
- Date: Mon, 16 Sep 2019 11:25:56 +0000 (UTC)
commit 03e30431a8af9a947a0c4ccab545f24da16bfe17
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Sep 14 17:14:55 2019 -0400
menutoolbutton: Add support for popovers
Just like the underlying menu button, support
popovers too.
gtk/gtkmenutoolbutton.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++-
gtk/gtkmenutoolbutton.h | 5 +++++
2 files changed, 58 insertions(+), 1 deletion(-)
---
diff --git a/gtk/gtkmenutoolbutton.c b/gtk/gtkmenutoolbutton.c
index cfcb1127cf..19aba366ce 100644
--- a/gtk/gtkmenutoolbutton.c
+++ b/gtk/gtkmenutoolbutton.c
@@ -26,6 +26,7 @@
#include "gtkmenubuttonprivate.h"
#include "gtkbox.h"
#include "gtkmenu.h"
+#include "gtkpopover.h"
#include "gtkmain.h"
#include "gtksizerequest.h"
#include "gtkbuildable.h"
@@ -103,7 +104,8 @@ enum
enum
{
PROP_0,
- PROP_MENU
+ PROP_MENU,
+ PROP_POPOVER
};
static gint signals[LAST_SIGNAL];
@@ -210,6 +212,10 @@ gtk_menu_tool_button_set_property (GObject *object,
gtk_menu_tool_button_set_menu (button, g_value_get_object (value));
break;
+ case PROP_POPOVER:
+ gtk_menu_tool_button_set_popover (button, g_value_get_object (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -230,6 +236,10 @@ gtk_menu_tool_button_get_property (GObject *object,
g_value_set_object (value, gtk_menu_button_get_popup (GTK_MENU_BUTTON (button->priv->arrow_button)));
break;
+ case PROP_POPOVER:
+ g_value_set_object (value, gtk_menu_button_get_popover (GTK_MENU_BUTTON (button->priv->arrow_button)));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -279,6 +289,13 @@ gtk_menu_tool_button_class_init (GtkMenuToolButtonClass *klass)
P_("The dropdown menu"),
GTK_TYPE_MENU,
GTK_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_POPOVER,
+ g_param_spec_object ("popover",
+ P_("Popover"),
+ P_("The dropdown popover"),
+ GTK_TYPE_POPOVER,
+ GTK_PARAM_READWRITE));
}
static void
@@ -324,6 +341,9 @@ gtk_menu_tool_button_buildable_add_child (GtkBuildable *buildable,
if (type && strcmp (type, "menu") == 0)
gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (buildable),
GTK_WIDGET (child));
+ else if (type && strcmp (type, "popover") == 0)
+ gtk_menu_tool_button_set_popover (GTK_MENU_TOOL_BUTTON (buildable),
+ GTK_WIDGET (child));
else
parent_buildable_iface->add_child (buildable, builder, child, type);
}
@@ -419,6 +439,38 @@ gtk_menu_tool_button_get_menu (GtkMenuToolButton *button)
return GTK_WIDGET (ret);
}
+void
+gtk_menu_tool_button_set_popover (GtkMenuToolButton *button,
+ GtkWidget *popover)
+{
+ GtkMenuToolButtonPrivate *priv;
+
+ g_return_if_fail (GTK_IS_MENU_TOOL_BUTTON (button));
+ g_return_if_fail (GTK_IS_POPOVER (popover) || popover == NULL);
+
+ priv = button->priv;
+
+ gtk_menu_button_set_popover (GTK_MENU_BUTTON (priv->arrow_button), popover);
+ gtk_menu_button_set_create_popup_func (GTK_MENU_BUTTON (priv->arrow_button),
+ _show_menu_emit, NULL, NULL);
+
+ g_object_notify (G_OBJECT (button), "popover");
+}
+
+GtkWidget *
+gtk_menu_tool_button_get_popover (GtkMenuToolButton *button)
+{
+ GtkPopover *ret;
+
+ g_return_val_if_fail (GTK_IS_MENU_TOOL_BUTTON (button), NULL);
+
+ ret = gtk_menu_button_get_popover (GTK_MENU_BUTTON (button->priv->arrow_button));
+ if (!ret)
+ return NULL;
+
+ return GTK_WIDGET (ret);
+}
+
/**
* gtk_menu_tool_button_set_arrow_tooltip_text:
* @button: a #GtkMenuToolButton
diff --git a/gtk/gtkmenutoolbutton.h b/gtk/gtkmenutoolbutton.h
index 6b88761ca2..3bfdc0ada1 100644
--- a/gtk/gtkmenutoolbutton.h
+++ b/gtk/gtkmenutoolbutton.h
@@ -46,6 +46,11 @@ void gtk_menu_tool_button_set_menu (GtkMenuToolButton *button,
GDK_AVAILABLE_IN_ALL
GtkWidget *gtk_menu_tool_button_get_menu (GtkMenuToolButton *button);
GDK_AVAILABLE_IN_ALL
+void gtk_menu_tool_button_set_popover (GtkMenuToolButton *button,
+ GtkWidget *popover);
+GDK_AVAILABLE_IN_ALL
+GtkWidget *gtk_menu_tool_button_get_popover (GtkMenuToolButton *button);
+GDK_AVAILABLE_IN_ALL
void gtk_menu_tool_button_set_arrow_tooltip_text (GtkMenuToolButton *button,
const gchar *text);
GDK_AVAILABLE_IN_ALL
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]