Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/bockbuild.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCody Russell <cody@jhu.edu>2018-12-13 18:39:38 +0300
committerCody Russell <cody@jhu.edu>2018-12-13 18:39:38 +0300
commit6b59ec9b75a5864c0cabd68670ac6910babba8f1 (patch)
tree62563f9df92fb40a7e933adeb4e6b6fbd2484e0b
parente0002d950396f943c31cc1a95c9cd3222f6f08d1 (diff)
[GTK] Update to the focus handling patch.
-rw-r--r--packages/patches/gtk/gtk-nsview-subview-focus-fixes.patch58
1 files changed, 52 insertions, 6 deletions
diff --git a/packages/patches/gtk/gtk-nsview-subview-focus-fixes.patch b/packages/patches/gtk/gtk-nsview-subview-focus-fixes.patch
index 50ed1dd..74dc49a 100644
--- a/packages/patches/gtk/gtk-nsview-subview-focus-fixes.patch
+++ b/packages/patches/gtk/gtk-nsview-subview-focus-fixes.patch
@@ -1,8 +1,16 @@
diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index a4b4dd4dbe..0fc5055ed0 100644
+index a4b4dd4dbe..5b9961eb14 100644
--- a/gtk/gtknsview.c
+++ b/gtk/gtknsview.c
-@@ -442,15 +442,30 @@ gtk_ns_view_replace_draw_insertion_point (void)
+@@ -49,6 +49,7 @@ enum
+ struct _GtkNSViewPrivate
+ {
+ NSView *view;
++ NSResponder *responder;
+ guint map_timeout;
+ gboolean enable_swizzle;
+ };
+@@ -442,15 +443,29 @@ gtk_ns_view_replace_draw_insertion_point (void)
}
}
@@ -10,7 +18,6 @@ index a4b4dd4dbe..0fc5055ed0 100644
+does_accept_first_responder_recursively (NSView *view)
+{
+ if ([view acceptsFirstResponder]) {
-+ g_print ("%s accepts? %d\n", object_getClassName (view), [view acceptsFirstResponder]);
+ return TRUE;
+ }
+
@@ -35,13 +42,52 @@ index a4b4dd4dbe..0fc5055ed0 100644
#if DEBUG_FOCUS
g_printerr ("%s can focus: %d\n",
-@@ -819,8 +834,7 @@ gtk_ns_view_native_child_event (GdkWindow *window,
+@@ -549,10 +564,12 @@ gtk_ns_view_notify (GObject *object,
+ gtk_widget_has_focus (GTK_WIDGET (object)));
+ #endif
+
+- if (gtk_widget_has_focus (GTK_WIDGET (object)))
+- [ns_window makeFirstResponder:ns_view->priv->view];
+- else if ([ns_window firstResponder] == ns_view->priv->view || (GTK_IS_WINDOW (toplevel) && !gtk_window_is_active (GTK_WINDOW (toplevel))))
++ if (gtk_widget_has_focus (GTK_WIDGET (object))) {
++ [ns_window makeFirstResponder:(ns_view->priv->responder ? ns_view->priv->responder : ns_view->priv->view)];
++ // ns_view->priv->responder = NULL;
++ } else if ([ns_window firstResponder] == ns_view->priv->view || (GTK_IS_WINDOW (toplevel) && !gtk_window_is_active (GTK_WINDOW (toplevel)))) {
+ [ns_window makeFirstResponder:nil];
++ }
+ }
+ }
+
+@@ -712,7 +729,7 @@ gtk_ns_view_grab_focus (GtkWidget *widget)
+ GTK_WIDGET_CLASS (gtk_ns_view_parent_class)->grab_focus (widget);
+
+ ns_window = [ns_view->priv->view window];
+- [ns_window makeFirstResponder:ns_view->priv->view];
++ [ns_window makeFirstResponder:(ns_view->priv->responder != NULL ? ns_view->priv->responder : ns_view->priv->view)];
+ }
+
+ static gboolean
+@@ -818,15 +835,20 @@ gtk_ns_view_native_child_event (GdkWindow *window,
+
if (hit &&
(hit == view ||
- [hit ancestorSharedWithView: view] == view) &&
+- [hit ancestorSharedWithView: view] == view) &&
- ([hit acceptsFirstResponder] ||
- [view acceptsFirstResponder]))
-+ does_accept_first_responder_recursively (view))
++ [hit ancestorSharedWithView: view] == view))
{
++ NSResponder *responder = (NSResponder *)hit;
++ while (responder) {
++ if ([responder acceptsFirstResponder])
++ break;
++ responder = [responder nextResponder];
++ }
#if DEBUG_FOCUS
g_printerr ("grabbing focus on %s\n",
+ class_getName ([ns_view->priv->view class]));
+ #endif
+
++ ns_view->priv->responder = responder;
+ gtk_widget_grab_focus (GTK_WIDGET (ns_view));
+ }
+ }