]> Pileus Git - ~andy/gtk/commitdiff
Move notification of "has_default" to here, so it is safe to call
authorOwen Taylor <otaylor@redhat.com>
Sat, 17 Nov 2001 01:18:49 +0000 (01:18 +0000)
committerOwen Taylor <otaylor@src.gnome.org>
Sat, 17 Nov 2001 01:18:49 +0000 (01:18 +0000)
Fri Nov 16 19:44:35 2001  Owen Taylor  <otaylor@redhat.com>

* gtk/gtkwindow.c (gtk_window_set_default): Move
notification of "has_default" to here, so it
is safe to call gtk_window_set_default() instead
of gtk_widget_grab_default().

* gtk/gtkwindow.c (gtk_window_set_focus): Make it call
gtk_widget_grab_focus(), which then calls
_gtk_widget_internal_set_focus(). This makes
gtk_window_set_focus() a safe way of both setting
and unsetting the focus widget.

* gtk/gtkwidget.c (gtk_widget_propagate_state): Use
gtk_widget_get_toplevel(), instead of gtk_widget_ancestor
to find the toplevel.

* gtk/gtkwindow.h: Move gtk_window_set_focus/default
from the "internal functions" section.

14 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
docs/reference/gdk-pixbuf/tmpl/gdk-pixbuf-loader.sgml
docs/reference/gtk/tmpl/gtkmessagedialog.sgml
docs/reference/gtk/tmpl/gtknotebook.sgml
docs/reference/gtk/tmpl/gtktreeview.sgml
gtk/gtkwidget.c
gtk/gtkwindow.c
gtk/gtkwindow.h

index 2fab1366f3e0bf389658511d8e9e03f00b52432f..4281ef84957769967a77802f55c6eba296bb3925 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+Fri Nov 16 19:44:35 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkwindow.c (gtk_window_set_default): Move 
+       notification of "has_default" to here, so it
+       is safe to call gtk_window_set_default() instead
+       of gtk_widget_grab_default().
+
+       * gtk/gtkwindow.c (gtk_window_set_focus): Make it call
+       gtk_widget_grab_focus(), which then calls 
+       _gtk_widget_internal_set_focus(). This makes 
+       gtk_window_set_focus() a safe way of both setting
+       and unsetting the focus widget.
+
+       * gtk/gtkwidget.c (gtk_widget_propagate_state): Use
+       gtk_widget_get_toplevel(), instead of gtk_widget_ancestor
+       to find the toplevel.
+
+       * gtk/gtkwindow.h: Move gtk_window_set_focus/default
+       from the "internal functions" section.
+
 2001-11-16  jacob berkman  <jacob@ximian.com>
 
        * tests/testgtk.c (create_radio_buttons): add some no-indicator
index 2fab1366f3e0bf389658511d8e9e03f00b52432f..4281ef84957769967a77802f55c6eba296bb3925 100644 (file)
@@ -1,3 +1,23 @@
+Fri Nov 16 19:44:35 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkwindow.c (gtk_window_set_default): Move 
+       notification of "has_default" to here, so it
+       is safe to call gtk_window_set_default() instead
+       of gtk_widget_grab_default().
+
+       * gtk/gtkwindow.c (gtk_window_set_focus): Make it call
+       gtk_widget_grab_focus(), which then calls 
+       _gtk_widget_internal_set_focus(). This makes 
+       gtk_window_set_focus() a safe way of both setting
+       and unsetting the focus widget.
+
+       * gtk/gtkwidget.c (gtk_widget_propagate_state): Use
+       gtk_widget_get_toplevel(), instead of gtk_widget_ancestor
+       to find the toplevel.
+
+       * gtk/gtkwindow.h: Move gtk_window_set_focus/default
+       from the "internal functions" section.
+
 2001-11-16  jacob berkman  <jacob@ximian.com>
 
        * tests/testgtk.c (create_radio_buttons): add some no-indicator
index 2fab1366f3e0bf389658511d8e9e03f00b52432f..4281ef84957769967a77802f55c6eba296bb3925 100644 (file)
@@ -1,3 +1,23 @@
+Fri Nov 16 19:44:35 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkwindow.c (gtk_window_set_default): Move 
+       notification of "has_default" to here, so it
+       is safe to call gtk_window_set_default() instead
+       of gtk_widget_grab_default().
+
+       * gtk/gtkwindow.c (gtk_window_set_focus): Make it call
+       gtk_widget_grab_focus(), which then calls 
+       _gtk_widget_internal_set_focus(). This makes 
+       gtk_window_set_focus() a safe way of both setting
+       and unsetting the focus widget.
+
+       * gtk/gtkwidget.c (gtk_widget_propagate_state): Use
+       gtk_widget_get_toplevel(), instead of gtk_widget_ancestor
+       to find the toplevel.
+
+       * gtk/gtkwindow.h: Move gtk_window_set_focus/default
+       from the "internal functions" section.
+
 2001-11-16  jacob berkman  <jacob@ximian.com>
 
        * tests/testgtk.c (create_radio_buttons): add some no-indicator
index 2fab1366f3e0bf389658511d8e9e03f00b52432f..4281ef84957769967a77802f55c6eba296bb3925 100644 (file)
@@ -1,3 +1,23 @@
+Fri Nov 16 19:44:35 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkwindow.c (gtk_window_set_default): Move 
+       notification of "has_default" to here, so it
+       is safe to call gtk_window_set_default() instead
+       of gtk_widget_grab_default().
+
+       * gtk/gtkwindow.c (gtk_window_set_focus): Make it call
+       gtk_widget_grab_focus(), which then calls 
+       _gtk_widget_internal_set_focus(). This makes 
+       gtk_window_set_focus() a safe way of both setting
+       and unsetting the focus widget.
+
+       * gtk/gtkwidget.c (gtk_widget_propagate_state): Use
+       gtk_widget_get_toplevel(), instead of gtk_widget_ancestor
+       to find the toplevel.
+
+       * gtk/gtkwindow.h: Move gtk_window_set_focus/default
+       from the "internal functions" section.
+
 2001-11-16  jacob berkman  <jacob@ximian.com>
 
        * tests/testgtk.c (create_radio_buttons): add some no-indicator
index 2fab1366f3e0bf389658511d8e9e03f00b52432f..4281ef84957769967a77802f55c6eba296bb3925 100644 (file)
@@ -1,3 +1,23 @@
+Fri Nov 16 19:44:35 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkwindow.c (gtk_window_set_default): Move 
+       notification of "has_default" to here, so it
+       is safe to call gtk_window_set_default() instead
+       of gtk_widget_grab_default().
+
+       * gtk/gtkwindow.c (gtk_window_set_focus): Make it call
+       gtk_widget_grab_focus(), which then calls 
+       _gtk_widget_internal_set_focus(). This makes 
+       gtk_window_set_focus() a safe way of both setting
+       and unsetting the focus widget.
+
+       * gtk/gtkwidget.c (gtk_widget_propagate_state): Use
+       gtk_widget_get_toplevel(), instead of gtk_widget_ancestor
+       to find the toplevel.
+
+       * gtk/gtkwindow.h: Move gtk_window_set_focus/default
+       from the "internal functions" section.
+
 2001-11-16  jacob berkman  <jacob@ximian.com>
 
        * tests/testgtk.c (create_radio_buttons): add some no-indicator
index 2fab1366f3e0bf389658511d8e9e03f00b52432f..4281ef84957769967a77802f55c6eba296bb3925 100644 (file)
@@ -1,3 +1,23 @@
+Fri Nov 16 19:44:35 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkwindow.c (gtk_window_set_default): Move 
+       notification of "has_default" to here, so it
+       is safe to call gtk_window_set_default() instead
+       of gtk_widget_grab_default().
+
+       * gtk/gtkwindow.c (gtk_window_set_focus): Make it call
+       gtk_widget_grab_focus(), which then calls 
+       _gtk_widget_internal_set_focus(). This makes 
+       gtk_window_set_focus() a safe way of both setting
+       and unsetting the focus widget.
+
+       * gtk/gtkwidget.c (gtk_widget_propagate_state): Use
+       gtk_widget_get_toplevel(), instead of gtk_widget_ancestor
+       to find the toplevel.
+
+       * gtk/gtkwindow.h: Move gtk_window_set_focus/default
+       from the "internal functions" section.
+
 2001-11-16  jacob berkman  <jacob@ximian.com>
 
        * tests/testgtk.c (create_radio_buttons): add some no-indicator
index 2fab1366f3e0bf389658511d8e9e03f00b52432f..4281ef84957769967a77802f55c6eba296bb3925 100644 (file)
@@ -1,3 +1,23 @@
+Fri Nov 16 19:44:35 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkwindow.c (gtk_window_set_default): Move 
+       notification of "has_default" to here, so it
+       is safe to call gtk_window_set_default() instead
+       of gtk_widget_grab_default().
+
+       * gtk/gtkwindow.c (gtk_window_set_focus): Make it call
+       gtk_widget_grab_focus(), which then calls 
+       _gtk_widget_internal_set_focus(). This makes 
+       gtk_window_set_focus() a safe way of both setting
+       and unsetting the focus widget.
+
+       * gtk/gtkwidget.c (gtk_widget_propagate_state): Use
+       gtk_widget_get_toplevel(), instead of gtk_widget_ancestor
+       to find the toplevel.
+
+       * gtk/gtkwindow.h: Move gtk_window_set_focus/default
+       from the "internal functions" section.
+
 2001-11-16  jacob berkman  <jacob@ximian.com>
 
        * tests/testgtk.c (create_radio_buttons): add some no-indicator
index 2b72b87b4a1b4064c33e03a75d822105bb1f676f..acdebe537cf2ed4bf4651baf48a8503752fc5f01 100644 (file)
@@ -141,6 +141,8 @@ Application-driven progressive image loading.
     fetch the partially-loaded pixbuf.
   </para>
 
+@gdkpixbufloader: the object which received the signal.
+<!-- # Unused Parameters # -->
 @loader: Loader which emitted the signal.
 
 <!-- ##### SIGNAL GdkPixbufLoader::area-updated ##### -->
@@ -152,6 +154,12 @@ Application-driven progressive image loading.
     areas of an image that is being loaded.
   </para>
 
+@gdkpixbufloader: the object which received the signal.
+@arg1: 
+@arg2: 
+@arg3: 
+@arg4: 
+<!-- # Unused Parameters # -->
 @loader: Loader which emitted the signal.
 @x: X offset of upper-left corner of the updated area.
 @y: Y offset of upper-left corner of the updated area.
@@ -166,6 +174,8 @@ Application-driven progressive image loading.
     drives it.
   </para>
 
+@gdkpixbufloader: the object which received the signal.
+<!-- # Unused Parameters # -->
 @loader: Loader which emitted the signal.
 
 <!--
index f41e6bc0158e2184c39695aeb95d39a11c6f7516..76d256390b7a94f5b8290accf2a96a2ad99872ad 100644 (file)
@@ -102,3 +102,13 @@ then call gtk_dialog_add_buttons().
 @Returns: 
 
 
+<!-- ##### ARG GtkMessageDialog:message-type ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GtkMessageDialog:buttons ##### -->
+<para>
+
+</para>
+
index a0979e9c8def2e3000c35bdd38bce640abfbdc29..4db5cf1439ffb751ae00ee03110a3d5be2dc2afb 100644 (file)
@@ -402,6 +402,14 @@ gtk_notebook_set_current_page() instead.
 @page_num: 
 
 
+<!-- ##### SIGNAL GtkNotebook::change-current-page ##### -->
+<para>
+
+</para>
+
+@notebook: the object which received the signal.
+@arg1: 
+
 <!-- ##### SIGNAL GtkNotebook::focus-tab ##### -->
 <para>
 
index f9692b2e74f172cb06eed5c7cc842b18f0b0d752..45175f5cf50e95d8442fc5350aa915f913911ab2 100644 (file)
@@ -475,7 +475,6 @@ GtkTreeView
 </para>
 
 @tree_view: 
-@window: 
 @x: 
 @y: 
 @path: 
@@ -483,6 +482,8 @@ GtkTreeView
 @cell_x: 
 @cell_y: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@window: 
 
 
 <!-- ##### FUNCTION gtk_tree_view_get_cell_area ##### -->
index b8d4aab31838de66bfbe160cf996d36c9b1b926a..0e1cada2911216d1d918eef4a7027b7a345a13f1 100644 (file)
@@ -3345,12 +3345,12 @@ gtk_widget_real_grab_focus (GtkWidget *focus_widget)
          
          if (widget == focus_widget)
            {
-             /* We call gtk_window_set_focus() here so that the
+             /* We call _gtk_window_internal_set_focus() here so that the
               * toplevel window can request the focus if necessary.
               * This is needed when the toplevel is a GtkPlug
               */
              if (!GTK_WIDGET_HAS_FOCUS (widget))
-               gtk_window_set_focus (GTK_WINDOW (toplevel), focus_widget);
+               _gtk_window_internal_set_focus (GTK_WINDOW (toplevel), focus_widget);
 
              return;
            }
@@ -3385,7 +3385,7 @@ gtk_widget_real_grab_focus (GtkWidget *focus_widget)
          widget = widget->parent;
        }
       if (GTK_IS_WINDOW (widget))
-       gtk_window_set_focus (GTK_WINDOW (widget), focus_widget);
+       _gtk_window_internal_set_focus (GTK_WINDOW (widget), focus_widget);
     }
 }
 
@@ -3455,22 +3455,14 @@ void
 gtk_widget_grab_default (GtkWidget *widget)
 {
   GtkWidget *window;
-  GtkType window_type;
   
   g_return_if_fail (GTK_IS_WIDGET (widget));
   g_return_if_fail (GTK_WIDGET_CAN_DEFAULT (widget));
   
-  window_type = GTK_TYPE_WINDOW;
-  window = widget->parent;
+  window = gtk_widget_get_toplevel (widget);
   
-  while (window && !gtk_type_is_a (GTK_WIDGET_TYPE (window), window_type))
-    window = window->parent;
-  
-  if (window && gtk_type_is_a (GTK_WIDGET_TYPE (window), window_type))
-    {
-      gtk_window_set_default (GTK_WINDOW (window), widget);
-      g_object_notify (G_OBJECT (widget), "has_default");
-    }
+  if (window && GTK_WIDGET_TOPLEVEL (window))
+    gtk_window_set_default (GTK_WINDOW (window), widget);
   else
     g_warning (G_STRLOC ": widget not within a GtkWindow");
 }
@@ -5775,8 +5767,8 @@ gtk_widget_propagate_state (GtkWidget           *widget,
     {
       GtkWidget *window;
 
-      window = gtk_widget_get_ancestor (widget, GTK_TYPE_WINDOW);
-      if (window)
+      window = gtk_widget_get_toplevel (widget);
+      if (window && GTK_WIDGET_TOPLEVEL (window))
        gtk_window_set_focus (GTK_WINDOW (window), NULL);
     }
 
index 77c18503dd9a4e8201468488818a88907236b6d4..a6153685c4df1db67e0b2c3cc504043faee3d0f2 100644 (file)
@@ -922,14 +922,14 @@ gtk_window_get_role (GtkWindow *window)
 /**
  * gtk_window_set_focus:
  * @window: a #GtkWindow
- * @focus: widget to be the new focus widget
+ * @focus: widget to be the new focus widget, or %NULL to unset
+ *   any focus widget for the toplevel window.
  *
- * If @focus is not the current focus widget, and is focusable, emits
- * the "set_focus" signal to set @focus as the focus widget for the
- * window.  This function is more or less GTK-internal; to focus an
- * entry widget or the like, you should use gtk_widget_grab_focus()
- * instead of this function.
- * 
+ * If @focus is not the current focus widget, and is focusable, sets
+ * it as the focus widget for the window. If @focus is %NULL, unsets
+ * the focus widget for this window. To set the focus to a particular
+ * widget in the toplevel, it is usually more convenient to use
+ * gtk_widget_grab_focus() instead of this function.
  **/
 void
 gtk_window_set_focus (GtkWindow *window,
@@ -942,6 +942,18 @@ gtk_window_set_focus (GtkWindow *window,
       g_return_if_fail (GTK_WIDGET_CAN_FOCUS (focus));
     }
 
+  if (focus)
+    gtk_widget_grab_focus (focus);
+  else
+    _gtk_window_internal_set_focus (window, NULL);
+}
+
+void
+_gtk_window_internal_set_focus (GtkWindow *window,
+                               GtkWidget *focus)
+{
+  g_return_if_fail (GTK_IS_WINDOW (window));
+
   if ((window->focus_widget != focus) ||
       (focus && !GTK_WIDGET_HAS_FOCUS (focus)))
     gtk_signal_emit (GTK_OBJECT (window), window_signals[SET_FOCUS], focus);
@@ -950,30 +962,39 @@ gtk_window_set_focus (GtkWindow *window,
 /**
  * gtk_window_set_default:
  * @window: a #GtkWindow
- * @default_widget: widget to be the default
+ * @default_widget: widget to be the default, or %NULL to unset the
+ *                  default widget for the toplevel.
  *
  * The default widget is the widget that's activated when the user
- * presses Enter in a dialog (for example). This function tells a
- * #GtkWindow about the current default widget; it's really a GTK
- * internal function and you shouldn't need it. Instead, to change the
- * default widget, first set the #GTK_CAN_DEFAULT flag on the widget
- * you'd like to make the default using GTK_WIDGET_SET_FLAGS(), then
- * call gtk_widget_grab_default() to move the default.
- * 
+ * presses Enter in a dialog (for example). This function sets or
+ * unsets the default widget for a #GtkWindow about. When setting
+ * (rather than unsetting) the default widget it's generally easier to
+ * call gtk_widget_grab_focus() on the widget. Before making a widget
+ * the default widget, you must set the #GTK_CAN_DEFAULT flag on the
+ * widget you'd like to make the default using GTK_WIDGET_SET_FLAGS().
  **/
 void
 gtk_window_set_default (GtkWindow *window,
                        GtkWidget *default_widget)
 {
+  GtkWidget *old_default;
+  
   g_return_if_fail (GTK_IS_WINDOW (window));
 
   if (default_widget)
     g_return_if_fail (GTK_WIDGET_CAN_DEFAULT (default_widget));
-
+  
   if (window->default_widget != default_widget)
     {
+      GtkWidget *old_default_widget = NULL;
+      
+      if (default_widget)
+       g_object_ref (default_widget);
+      
       if (window->default_widget)
        {
+         old_default_widget = window->default_widget;
+         
          if (window->focus_widget != window->default_widget ||
              !GTK_WIDGET_RECEIVES_DEFAULT (window->default_widget))
            GTK_WIDGET_UNSET_FLAGS (window->default_widget, GTK_HAS_DEFAULT);
@@ -989,6 +1010,15 @@ gtk_window_set_default (GtkWindow *window,
            GTK_WIDGET_SET_FLAGS (window->default_widget, GTK_HAS_DEFAULT);
          gtk_widget_queue_draw (window->default_widget);
        }
+
+      if (old_default_widget)
+       g_object_notify (G_OBJECT (old_default_widget), "has_default");
+      
+      if (default_widget)
+       {
+         g_object_notify (G_OBJECT (default_widget), "has_default");
+         g_object_unref (default_widget);
+       }
     }
 }
 
index 8e62e60d030c0376ed44ad090ca39a8faffbec88..3a6dd6de9e52de12581ef73d6b4ad49901a2ac14 100644 (file)
@@ -166,7 +166,11 @@ void       gtk_window_remove_accel_group       (GtkWindow           *window,
 void       gtk_window_set_position             (GtkWindow           *window,
                                                GtkWindowPosition    position);
 gboolean   gtk_window_activate_focus          (GtkWindow           *window);
+void       gtk_window_set_focus                (GtkWindow           *window,
+                                               GtkWidget           *focus);
 GtkWidget *gtk_window_get_focus                (GtkWindow           *window);
+void       gtk_window_set_default              (GtkWindow           *window,
+                                               GtkWidget           *default_widget);
 gboolean   gtk_window_activate_default        (GtkWindow           *window);
 
 void       gtk_window_set_transient_for        (GtkWindow           *window, 
@@ -305,10 +309,8 @@ void             gtk_window_group_remove_window (GtkWindowGroup     *window_grou
                                                 GtkWindow          *window);
 
 /* --- internal functions --- */
-void            gtk_window_set_focus           (GtkWindow *window,
+void            _gtk_window_internal_set_focus (GtkWindow *window,
                                                GtkWidget *focus);
-void            gtk_window_set_default         (GtkWindow *window,
-                                               GtkWidget *defaultw);
 void            gtk_window_remove_embedded_xid (GtkWindow *window,
                                                guint      xid);
 void            gtk_window_add_embedded_xid    (GtkWindow *window,