[gtk/wip/matthiasc/context-menu: 934/945] Add gtk_widget_set_context_menu
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/matthiasc/context-menu: 934/945] Add gtk_widget_set_context_menu
- Date: Mon, 8 Apr 2019 04:31:11 +0000 (UTC)
commit 5eec9fe95748ed4583f53cae529a476a2ec4f75c
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Jan 26 18:50:14 2019 -0500
Add gtk_widget_set_context_menu
This lets apps associate a menu model with a widget.
It is up to individual widgets to use it.
gtk/gtkwidget.c | 37 +++++++++++++++++++++++++++++++++++++
gtk/gtkwidget.h | 7 +++++++
gtk/gtkwidgetprivate.h | 2 ++
3 files changed, 46 insertions(+)
---
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index ed0a21f5a7..3c83fd3f3f 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -573,6 +573,7 @@ enum {
PROP_SCALE_FACTOR,
PROP_CSS_NAME,
PROP_LAYOUT_MANAGER,
+ PROP_CONTEXT_MENU,
NUM_PROPERTIES
};
@@ -1429,6 +1430,13 @@ gtk_widget_class_init (GtkWidgetClass *klass)
GTK_TYPE_LAYOUT_MANAGER,
GTK_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+ widget_props[PROP_CONTEXT_MENU] =
+ g_param_spec_object ("context-menu",
+ P_("Context Menu"),
+ P_("The menu model used for this widgets' context menu"),
+ G_TYPE_MENU_MODEL,
+ GTK_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+
g_object_class_install_properties (gobject_class, NUM_PROPERTIES, widget_props);
/**
@@ -2361,6 +2369,9 @@ gtk_widget_set_property (GObject *object,
case PROP_LAYOUT_MANAGER:
gtk_widget_set_layout_manager (widget, g_value_get_object (value));
break;
+ case PROP_CONTEXT_MENU:
+ gtk_widget_set_context_menu (widget, g_value_get_object (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -2513,6 +2524,9 @@ gtk_widget_get_property (GObject *object,
case PROP_LAYOUT_MANAGER:
g_value_set_object (value, gtk_widget_get_layout_manager (widget));
break;
+ case PROP_CONTEXT_MENU:
+ g_value_set_object (value, gtk_widget_get_context_menu (widget));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -13592,3 +13606,26 @@ gtk_widget_get_layout_manager (GtkWidget *widget)
return priv->layout_manager;
}
+
+void
+gtk_widget_set_context_menu (GtkWidget *widget,
+ GMenuModel *menu)
+{
+ GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
+
+ g_return_if_fail (GTK_IS_WIDGET (widget));
+ g_return_if_fail (menu == NULL || G_IS_MENU_MODEL (menu));
+
+ g_set_object (&priv->context_menu, menu);
+ g_object_notify_by_pspec (G_OBJECT (widget), widget_props[PROP_CONTEXT_MENU]);
+}
+
+GMenuModel *
+gtk_widget_get_context_menu (GtkWidget *widget)
+{
+ GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
+
+ g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+
+ return priv->context_menu;
+}
diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h
index 8ff503a400..0f09b36867 100644
--- a/gtk/gtkwidget.h
+++ b/gtk/gtkwidget.h
@@ -1057,6 +1057,13 @@ void gtk_widget_snapshot_child (GtkWidget *widget,
GtkWidget *child,
GtkSnapshot *snapshot);
+GDK_AVAILABLE_IN_ALL
+void gtk_widget_set_context_menu (GtkWidget *widget,
+ GMenuModel *menu);
+GDK_AVAILABLE_IN_ALL
+GMenuModel * gtk_widget_get_context_menu (GtkWidget *widget);
+
+
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkWidget, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkRequisition, gtk_requisition_free)
diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h
index 03c9f95923..4304506bcc 100644
--- a/gtk/gtkwidgetprivate.h
+++ b/gtk/gtkwidgetprivate.h
@@ -190,6 +190,8 @@ struct _GtkWidgetPrivate
/* Pointer cursor */
GdkCursor *cursor;
+
+ GMenuModel *context_menu;
};
GtkCssNode * gtk_widget_get_css_node (GtkWidget *widget);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]