79 lines
2.3 KiB
Diff
79 lines
2.3 KiB
Diff
--- gtk+-2.6.4/gtk/gtkwindow.c 2005-02-21 06:21:49.000000000 +0200
|
|
+++ gtk+-2.6.4/gtk/gtkwindow.c 2005-04-06 16:19:38.407699504 +0300
|
|
@@ -166,6 +166,7 @@
|
|
guint skips_taskbar : 1;
|
|
guint skips_pager : 1;
|
|
guint accept_focus : 1;
|
|
+ GtkWidget *prev_focus_widget;
|
|
guint focus_on_map : 1;
|
|
};
|
|
|
|
@@ -293,6 +294,9 @@
|
|
GValue *value,
|
|
GParamSpec *pspec);
|
|
|
|
+static void gtk_window_focus_weak_notify (GtkWindow *window,
|
|
+ GtkWidget *widget);
|
|
+static void gtk_window_weak_notify(GtkWidget *widget, GtkWindow *window);
|
|
|
|
GType
|
|
gtk_window_get_type (void)
|
|
@@ -771,6 +775,7 @@
|
|
window->decorated = TRUE;
|
|
window->mnemonic_modifier = GDK_MOD1_MASK;
|
|
window->screen = gdk_screen_get_default ();
|
|
+ priv->prev_focus_widget = NULL;
|
|
|
|
priv->accept_focus = TRUE;
|
|
priv->focus_on_map = TRUE;
|
|
@@ -7505,3 +7510,49 @@
|
|
}
|
|
|
|
#endif
|
|
+
|
|
+/*Hildon focus handling*/
|
|
+GtkWidget *gtk_window_get_prev_focus_widget( GtkWindow *window )
|
|
+{
|
|
+ g_return_val_if_fail( GTK_IS_WINDOW(window), NULL );
|
|
+ return GTK_WINDOW_GET_PRIVATE(window)->prev_focus_widget;
|
|
+}
|
|
+
|
|
+static void gtk_window_weak_notify(GtkWidget *widget, GtkWindow *window)
|
|
+{
|
|
+ GtkWindowPrivate *priv = GTK_WINDOW_GET_PRIVATE(window);
|
|
+ if (priv->prev_focus_widget == widget)
|
|
+ g_object_weak_unref(G_OBJECT(widget),
|
|
+ (GWeakNotify)gtk_window_focus_weak_notify,
|
|
+ (gpointer)window);
|
|
+}
|
|
+
|
|
+void gtk_window_set_prev_focus_widget( GtkWindow *window, GtkWidget *widget )
|
|
+{
|
|
+ GtkWindowPrivate *priv = GTK_WINDOW_GET_PRIVATE(window);
|
|
+ g_return_if_fail(GTK_IS_WINDOW(window));
|
|
+ g_return_if_fail(GTK_IS_WIDGET(widget));
|
|
+
|
|
+ if (priv->prev_focus_widget)
|
|
+ {
|
|
+ g_object_weak_unref(G_OBJECT(window), (GWeakNotify)gtk_window_weak_notify,
|
|
+ (gpointer)priv->prev_focus_widget);
|
|
+ g_object_weak_unref(G_OBJECT(priv->prev_focus_widget),
|
|
+ (GWeakNotify)gtk_window_focus_weak_notify,
|
|
+ (gpointer)window);
|
|
+ }
|
|
+
|
|
+ priv->prev_focus_widget = widget;
|
|
+
|
|
+ g_object_weak_ref(G_OBJECT(window), (GWeakNotify)gtk_window_weak_notify,
|
|
+ (gpointer)widget);
|
|
+ g_object_weak_ref(G_OBJECT(widget), (GWeakNotify)gtk_window_focus_weak_notify,
|
|
+ (gpointer)window);
|
|
+}
|
|
+
|
|
+static void gtk_window_focus_weak_notify(GtkWindow *window, GtkWidget *widget)
|
|
+{
|
|
+ GtkWindowPrivate *priv = GTK_WINDOW_GET_PRIVATE(window);
|
|
+ priv->prev_focus_widget = window->focus_widget;
|
|
+}
|
|
+
|