[gtk/wip/matthiasc/popup4: 94/94] root: Drop default handling
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/matthiasc/popup4: 94/94] root: Drop default handling
- Date: Sat, 27 Apr 2019 04:49:18 +0000 (UTC)
commit 002d41b0eec96aa0347e5a1d79d3f787cee490fc
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Apr 27 04:06:17 2019 +0000
root: Drop default handling
We no longer treat the default as generic thing.
Instead, GtkWindow and GtkPopover have their own
ways to set defaults.
docs/reference/gtk/gtk4-sections.txt | 3 --
gtk/gtkpopover.c | 55 +++++++++++++++++++++-
gtk/gtkpopover.h | 6 ++-
gtk/gtkroot.c | 90 ------------------------------------
gtk/gtkroot.h | 8 ----
gtk/gtkwindow.c | 22 ++++++---
6 files changed, 74 insertions(+), 110 deletions(-)
---
diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt
index 156abe8739..8ee5751c6c 100644
--- a/docs/reference/gtk/gtk4-sections.txt
+++ b/docs/reference/gtk/gtk4-sections.txt
@@ -6452,9 +6452,6 @@ gtk_popover_set_pointing_to
gtk_popover_get_pointing_to
gtk_popover_set_position
gtk_popover_get_position
-GtkPopoverConstraint
-gtk_popover_set_constrain_to
-gtk_popover_get_constrain_to
gtk_popover_set_modal
gtk_popover_get_modal
gtk_popover_set_default_widget
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
index 4c222e87f0..177ff35088 100644
--- a/gtk/gtkpopover.c
+++ b/gtk/gtkpopover.c
@@ -159,6 +159,7 @@ enum {
PROP_POINTING_TO,
PROP_POSITION,
PROP_MODAL,
+ PROP_DEFAULT_WIDGET,
NUM_PROPERTIES
};
@@ -680,6 +681,10 @@ gtk_popover_set_property (GObject *object,
gtk_popover_set_modal (popover, g_value_get_boolean (value));
break;
+ case PROP_DEFAULT_WIDGET:
+ gtk_popover_set_default_widget (popover, g_value_get_object (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -804,6 +809,12 @@ gtk_popover_class_init (GtkPopoverClass *klass)
P_("Whether the popover is modal"),
TRUE,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
+ properties[PROP_DEFAULT_WIDGET] =
+ g_param_spec_object ("default-widget",
+ P_("Default widget"),
+ P_("The default widget"),
+ GTK_TYPE_WIDGET,
+ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
g_object_class_install_properties (object_class, NUM_PROPERTIES, properties);
@@ -1246,5 +1257,47 @@ gtk_popover_set_default_widget (GtkPopover *popover,
{
GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
- priv->default_widget = widget;
+ g_return_if_fail (GTK_IS_POPOVER (popover));
+
+ if (widget)
+ g_return_if_fail (gtk_widget_get_can_default (widget));
+
+ if (priv->default_widget != widget)
+ {
+ GtkWidget *old_default_widget = NULL;
+
+ if (priv->default_widget)
+ {
+ old_default_widget = priv->default_widget;
+ _gtk_widget_set_has_default (priv->default_widget, FALSE);
+ gtk_widget_queue_draw (priv->default_widget);
+ }
+
+ priv->default_widget = widget;
+
+ if (priv->default_widget)
+ {
+ _gtk_widget_set_has_default (priv->default_widget, TRUE);
+ gtk_widget_queue_draw (priv->default_widget);
+ }
+
+ if (old_default_widget)
+ g_object_notify (G_OBJECT (old_default_widget), "has-default");
+
+ if (widget)
+ g_object_notify (G_OBJECT (widget), "has-default");
+
+ g_object_notify (G_OBJECT (popover), "default-widget");
+ }
}
+
+GtkWidget *
+gtk_popover_get_default_widget (GtkPopover *popover)
+{
+ GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
+
+ g_return_val_if_fail (GTK_IS_POPOVER (popover), NULL);
+
+ return priv->default_widget;
+}
+
diff --git a/gtk/gtkpopover.h b/gtk/gtkpopover.h
index e9456bd7cb..73d7997fa1 100644
--- a/gtk/gtkpopover.h
+++ b/gtk/gtkpopover.h
@@ -102,8 +102,10 @@ GDK_AVAILABLE_IN_ALL
void gtk_popover_popdown (GtkPopover *popover);
GDK_AVAILABLE_IN_ALL
-void gtk_popover_set_default_widget (GtkPopover *popover,
- GtkWidget *widget);
+void gtk_popover_set_default_widget (GtkPopover *popover,
+ GtkWidget *widget);
+GDK_AVAILABLE_IN_ALL
+GtkWidget * gtk_popover_get_default_widget (GtkPopover *popover);
GDK_AVAILABLE_IN_ALL
GListModel * gtk_popover_get_popovers (void);
diff --git a/gtk/gtkroot.c b/gtk/gtkroot.c
index b9f5858cef..ad89b09517 100644
--- a/gtk/gtkroot.c
+++ b/gtk/gtkroot.c
@@ -135,13 +135,6 @@ gtk_root_default_init (GtkRootInterface *iface)
P_("The focus widget"),
GTK_TYPE_WIDGET,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
-
- g_object_interface_install_property (iface,
- g_param_spec_object ("default-widget",
- P_("Default widget"),
- P_("The default widget"),
- GTK_TYPE_WIDGET,
- GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
}
GdkDisplay *
@@ -277,94 +270,11 @@ gtk_root_activate_focus (GtkRoot *self)
return FALSE;
}
-/**
- * gtk_root_set_default:
- * @self: a #GtkRoot
- * @widget: (allow-none): widget to be the default, or %NULL
- * to unset the default widget
- *
- * The default widget is the widget that’s activated when the user
- * presses Enter in a dialog (for example). This function sets or
- * unsets the default widget for a #GtkRoot.
- *
- * When setting (rather than unsetting) the default widget it is
- * generally easier to call gtk_widget_grab_default() on the widget.
- * Before making a widget the default widget, you must call
- * gtk_widget_set_can_default() on the widget you’d like to make
- * the default.
- */
-void
-gtk_root_set_default (GtkRoot *self,
- GtkWidget *widget)
-{
- g_return_if_fail (GTK_IS_ROOT (self));
- g_return_if_fail (widget == NULL || GTK_IS_WIDGET (widget));
-
- g_object_set (self, "default-widget", widget, NULL);
-}
-
-/**
- * gtk_root_get_default:
- * @self: a #GtkRoot
- *
- * Returns the default widget for @root. See
- * gtk_root_set_default() for more details.
- *
- * Returns: (nullable) (transfer none): the default widget, or %NULL
- * if there is none
- */
-GtkWidget *
-gtk_root_get_default (GtkRoot *self)
-{
- GtkWidget *widget;
-
- g_return_val_if_fail (GTK_IS_ROOT (self), NULL);
-
- g_object_get (self, "default-widget", &widget, NULL);
-
- if (widget)
- g_object_unref (widget);
-
- return widget;
-}
-
-/**
- * gtk_root_activate_default:
- * @self: a #GtkRoot
- *
- * Activates the default widget for the window, unless the current
- * focused widget has been configured to receive the default action
- * (see gtk_widget_set_receives_default()), in which case the
- * focused widget is activated.
- *
- * Returns: %TRUE if a widget got activated
- */
-gboolean
-gtk_root_activate_default (GtkRoot *self)
-{
- GtkWidget *default_widget;
- GtkWidget *focus_widget;
-
- g_return_val_if_fail (GTK_IS_ROOT (self), FALSE);
-
- default_widget = gtk_root_get_default (self);
- focus_widget = gtk_root_get_focus (self);
-
- if (default_widget && gtk_widget_is_sensitive (default_widget) &&
- (!focus_widget || !gtk_widget_get_receives_default (focus_widget)))
- return gtk_widget_activate (default_widget);
- else if (focus_widget && gtk_widget_is_sensitive (focus_widget))
- return gtk_widget_activate (focus_widget);
-
- return FALSE;
-}
-
guint
gtk_root_install_properties (GObjectClass *object_class,
guint first_prop)
{
g_object_class_override_property (object_class, first_prop + GTK_ROOT_PROP_FOCUS_WIDGET, "focus-widget");
- g_object_class_override_property (object_class, first_prop + GTK_ROOT_PROP_DEFAULT_WIDGET,
"default-widget");
return GTK_ROOT_NUM_PROPERTIES;
}
diff --git a/gtk/gtkroot.h b/gtk/gtkroot.h
index b045005eea..81439e5b9a 100644
--- a/gtk/gtkroot.h
+++ b/gtk/gtkroot.h
@@ -103,14 +103,6 @@ GtkWidget * gtk_root_get_focus (GtkRoot *self);
GDK_AVAILABLE_IN_ALL
gboolean gtk_root_activate_focus (GtkRoot *self);
-GDK_AVAILABLE_IN_ALL
-void gtk_root_set_default (GtkRoot *self,
- GtkWidget *widget);
-GDK_AVAILABLE_IN_ALL
-GtkWidget * gtk_root_get_default (GtkRoot *self);
-GDK_AVAILABLE_IN_ALL
-gboolean gtk_root_activate_default (GtkRoot *self);
-
GDK_AVAILABLE_IN_ALL
void gtk_root_add_mnemonic (GtkRoot *root,
guint keyval,
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 032cdfffa0..b9eb9ab968 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -336,6 +336,7 @@ enum {
PROP_FOCUS_VISIBLE,
PROP_IS_MAXIMIZED,
+ PROP_DEFAULT_WIDGET,
LAST_ARG
};
@@ -1072,6 +1073,13 @@ gtk_window_class_init (GtkWindowClass *klass)
GTK_TYPE_APPLICATION,
GTK_PARAM_READWRITE|G_PARAM_STATIC_STRINGS|G_PARAM_EXPLICIT_NOTIFY);
+ window_props[PROP_DEFAULT_WIDGET] =
+ g_param_spec_object ("default-widget",
+ P_("Default widget"),
+ P_("The default widget"),
+ GTK_TYPE_WIDGET,
+ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
+
g_object_class_install_properties (gobject_class, LAST_ARG, window_props);
gtk_root_install_properties (gobject_class, LAST_ARG);
@@ -2040,12 +2048,14 @@ gtk_window_set_property (GObject *object,
case PROP_FOCUS_VISIBLE:
gtk_window_set_focus_visible (window, g_value_get_boolean (value));
break;
+ case PROP_DEFAULT_WIDGET:
+ gtk_window_set_default (window, g_value_get_object (value));
+ break;
+
case LAST_ARG + GTK_ROOT_PROP_FOCUS_WIDGET:
gtk_window_set_focus (window, g_value_get_object (value));
break;
- case LAST_ARG + GTK_ROOT_PROP_DEFAULT_WIDGET:
- gtk_window_set_default (window, g_value_get_object (value));
- break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -2143,12 +2153,12 @@ gtk_window_get_property (GObject *object,
case PROP_IS_MAXIMIZED:
g_value_set_boolean (value, gtk_window_is_maximized (window));
break;
+ case PROP_DEFAULT_WIDGET:
+ g_value_set_object (value, gtk_window_get_default_widget (window));
+ break;
case LAST_ARG + GTK_ROOT_PROP_FOCUS_WIDGET:
g_value_set_object (value, gtk_window_get_focus (window));
break;
- case LAST_ARG + GTK_ROOT_PROP_DEFAULT_WIDGET:
- g_value_set_object (value, gtk_window_get_default_widget (window));
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]