summaryrefslogtreecommitdiff
path: root/patches/gtk-osx.patch
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2020-02-23 14:51:56 +0100
committerRobin Gareus <robin@gareus.org>2020-02-23 16:21:50 +0100
commit96ef1dc0ed9862bf4937d182f789edd20c17581f (patch)
tree6851918f213f836e3e4de0bb6cccfa5a270b0ca2 /patches/gtk-osx.patch
parent3e77680a57ee28571ec5558845df2ad82246741a (diff)
Cleanup cource tree: collect patches
Diffstat (limited to 'patches/gtk-osx.patch')
-rw-r--r--patches/gtk-osx.patch542
1 files changed, 0 insertions, 542 deletions
diff --git a/patches/gtk-osx.patch b/patches/gtk-osx.patch
deleted file mode 100644
index 013e4561bb..0000000000
--- a/patches/gtk-osx.patch
+++ /dev/null
@@ -1,542 +0,0 @@
-Index: gtk/gtktreeview.c
-===================================================================
---- gtk/gtktreeview.c (revision 21770)
-+++ gtk/gtktreeview.c (working copy)
-@@ -2534,6 +2534,7 @@
- gboolean row_double_click = FALSE;
- gboolean rtl;
- gboolean node_selected;
-+ gboolean edits_allowed;
-
- /* Empty tree? */
- if (tree_view->priv->tree == NULL)
-@@ -2643,9 +2644,17 @@
-
- tree_view->priv->focus_column = column;
-
-+ /* ARDOUR HACK */
-+
-+ if (g_object_get_data (G_OBJECT(tree_view), "mouse-edits-require-mod1")) {
-+ edits_allowed = (event->state & GDK_MOD1_MASK);
-+ } else {
-+ /* regular GTK design: do edits if none of the default modifiers are active */
-+ edits_allowed = !(event->state & gtk_accelerator_get_default_mod_mask ());
-+ }
-+
- /* decide if we edit */
-- if (event->type == GDK_BUTTON_PRESS && event->button == 1 &&
-- !(event->state & gtk_accelerator_get_default_mod_mask ()))
-+ if (event->type == GDK_BUTTON_PRESS && event->button == 1 && edits_allowed)
- {
- GtkTreePath *anchor;
- GtkTreeIter iter;
-Index: gtk/gtkquartz.c
-===================================================================
---- gtk/gtkquartz.c (revision 21770)
-+++ gtk/gtkquartz.c (working copy)
-@@ -24,6 +24,23 @@
- #include "gtkalias.h"
-
- NSImage *
-+_gtk_quartz_create_image_from_drawable (GdkDrawable* drawable)
-+{
-+ GdkPixbuf* pixbuf;
-+ NSImage* image = NULL;
-+
-+ pixbuf = gdk_pixbuf_get_from_drawable (NULL, drawable, NULL,
-+ 0, 0, /* src */
-+ 0, 0, /* dst */
-+ -1, -1);
-+ if (pixbuf)
-+ image = _gtk_quartz_create_image_from_pixbuf (pixbuf);
-+
-+ return image;
-+}
-+
-+
-+NSImage *
- _gtk_quartz_create_image_from_pixbuf (GdkPixbuf *pixbuf)
- {
- CGColorSpaceRef colorspace;
-Index: gtk/gtkquartz.h
-===================================================================
---- gtk/gtkquartz.h (revision 21770)
-+++ gtk/gtkquartz.h (working copy)
-@@ -41,6 +41,7 @@
- GtkSelectionData *selection_data);
-
- NSImage *_gtk_quartz_create_image_from_pixbuf (GdkPixbuf *pixbuf);
-+NSImage *_gtk_quartz_create_image_from_drawable (GdkDrawable *drawable);
-
- G_END_DECLS
-
-Index: gtk/gtktooltip.c
-===================================================================
---- gtk/gtktooltip.c (revision 21770)
-+++ gtk/gtktooltip.c (working copy)
-@@ -426,6 +426,7 @@
- gtk_tooltip_trigger_tooltip_query (GdkDisplay *display)
- {
- gint x, y;
-+ gint rx, ry;
- GdkWindow *window;
- GdkEvent event;
-
-@@ -434,10 +435,14 @@
- if (!window)
- return;
-
-+ gdk_window_get_origin (window, &rx, &ry);
-+
- event.type = GDK_MOTION_NOTIFY;
- event.motion.window = window;
- event.motion.x = x;
-+ event.motion.x_root = rx + x;
- event.motion.y = y;
-+ event.motion.y_root = ry + y;
- event.motion.is_hint = FALSE;
-
- _gtk_tooltip_handle_event (&event);
-Index: gtk/gtkdnd-quartz.c
-===================================================================
---- gtk/gtkdnd-quartz.c (revision 21770)
-+++ gtk/gtkdnd-quartz.c (working copy)
-@@ -63,6 +63,11 @@
- gboolean create);
- static void gtk_drag_source_site_destroy (gpointer data);
-
-+static GtkDragSourceInfo *gtk_drag_get_source_info (GdkDragContext *context,
-+ gboolean create);
-+
-+extern GdkDragContext *gdk_quartz_drag_source_context(); /* gdk/quartz/gdkdnd-quartz.c */
-+
- struct _GtkDragSourceSite
- {
- GdkModifierType start_button_mask;
-@@ -89,13 +94,16 @@
-
- struct _GtkDragSourceInfo
- {
-+ GtkWidget *source_widget;
- GtkWidget *widget;
- GtkTargetList *target_list; /* Targets for drag data */
- GdkDragAction possible_actions; /* Actions allowed by source */
- GdkDragContext *context; /* drag context */
--
-+ NSEvent *nsevent; /* what started it */
- gint hot_x, hot_y; /* Hot spot for drag */
- GdkPixbuf *icon_pixbuf;
-+ gboolean success;
-+ gboolean delete;
- };
-
- struct _GtkDragDestSite
-@@ -223,7 +231,9 @@
- selection_data,
- 0, time);
- }
-+
-
-+
- if (site && site->flags & GTK_DEST_DEFAULT_DROP)
- {
- gtk_drag_finish (context,
-@@ -233,19 +243,24 @@
- }
- }
-
--
--GtkWidget *
--gtk_drag_get_source_widget (GdkDragContext *context)
--{
-- return NULL;
--}
--
- void
- gtk_drag_finish (GdkDragContext *context,
- gboolean success,
- gboolean del,
- guint32 time)
- {
-+ GtkDragSourceInfo *info;
-+ GdkDragContext* source_context = gdk_quartz_drag_source_context ();
-+
-+ if (source_context)
-+ {
-+ info = gtk_drag_get_source_info (source_context, FALSE);
-+ if (info)
-+ {
-+ info->success = success;
-+ info->delete = del;
-+ }
-+ }
- }
-
- static void
-@@ -307,6 +322,22 @@
- g_object_set_qdata (G_OBJECT (context), dest_info_quark, NULL);
- }
-
-+GtkWidget *
-+gtk_drag_get_source_widget (GdkDragContext *context)
-+{
-+ GtkDragSourceInfo *info;
-+ GdkDragContext* real_source_context = gdk_quartz_drag_source_context();
-+
-+ if (!real_source_context)
-+ return NULL;
-+
-+ info = gtk_drag_get_source_info (real_source_context, FALSE);
-+ if (!info)
-+ return NULL;
-+
-+ return info->source_widget;
-+}
-+
- /*************************************************************
- * gtk_drag_highlight_expose:
- * Callback for expose_event for highlighted widgets.
-@@ -857,6 +888,8 @@
- gtk_drag_get_data (widget, context, target, time);
- }
-
-+ /* leave a note for the source-side context about the action chosen */
-+
- g_signal_emit_by_name (widget, "drag-drop",
- context, x, y, time, &retval);
-
-@@ -1031,6 +1064,45 @@
- return GDK_NONE;
- }
-
-+static gboolean
-+gtk_drag_begin_idle (gpointer arg)
-+{
-+ GdkDragContext* context = (GdkDragContext*) arg;
-+ GtkDragSourceInfo* info = gtk_drag_get_source_info (context, FALSE);
-+ NSWindow *nswindow;
-+ NSPasteboard *pasteboard;
-+ GtkDragSourceOwner *owner;
-+ NSPoint point;
-+
-+ g_assert (info != NULL);
-+
-+ pasteboard = [NSPasteboard pasteboardWithName:NSDragPboard];
-+ owner = [[GtkDragSourceOwner alloc] initWithInfo:info];
-+
-+ [pasteboard declareTypes:_gtk_quartz_target_list_to_pasteboard_types (info->target_list) owner:owner];
-+
-+ if ((nswindow = get_toplevel_nswindow (info->source_widget)) == NULL)
-+ return FALSE;
-+
-+ /* Ref the context. It's unreffed when the drag has been aborted */
-+ g_object_ref (info->context);
-+
-+ /* FIXME: If the event isn't a mouse event, use the global cursor position instead */
-+ point = [info->nsevent locationInWindow];
-+
-+ [nswindow dragImage:_gtk_quartz_create_image_from_pixbuf (info->icon_pixbuf)
-+ at:point
-+ offset:NSMakeSize(0, 0)
-+ event:info->nsevent
-+ pasteboard:pasteboard
-+ source:nswindow
-+ slideBack:YES];
-+
-+ [info->nsevent release];
-+
-+ return FALSE;
-+}
-+
- static GdkDragContext *
- gtk_drag_begin_internal (GtkWidget *widget,
- GtkDragSourceSite *site,
-@@ -1042,16 +1114,13 @@
- GtkDragSourceInfo *info;
- GdkDragContext *context;
- NSWindow *nswindow;
-- NSPasteboard *pasteboard;
-- GtkDragSourceOwner *owner;
-- NSEvent *nsevent;
-- NSPoint point;
-
- context = gdk_drag_begin (NULL, NULL);
- context->is_source = TRUE;
-
- info = gtk_drag_get_source_info (context, TRUE);
-
-+ info->source_widget = g_object_ref (widget);
- info->widget = g_object_ref (widget);
- info->target_list = target_list;
- gtk_target_list_ref (target_list);
-@@ -1086,13 +1155,13 @@
- GdkPixbuf *pixbuf;
-
- pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, 1, 1);
-- gdk_pixbuf_fill (pixbuf, 0xffffff);
--
-- gtk_drag_set_icon_pixbuf (context,
-- pixbuf,
-+ gdk_pixbuf_fill (pixbuf, 0xffffff);
-+
-+ gtk_drag_set_icon_pixbuf (context,
-+ pixbuf,
- 0, 0);
-
-- g_object_unref (pixbuf);
-+ g_object_unref (pixbuf);
- }
- break;
- case GTK_IMAGE_PIXBUF:
-@@ -1117,31 +1186,17 @@
- }
- }
-
-- gdk_pointer_ungrab (0);
--
-- pasteboard = [NSPasteboard pasteboardWithName:NSDragPboard];
-- owner = [[GtkDragSourceOwner alloc] initWithInfo:info];
-+ nswindow = get_toplevel_nswindow (widget);
-+ info->nsevent = [nswindow currentEvent];
-+ [info->nsevent retain];
-
-- [pasteboard declareTypes:_gtk_quartz_target_list_to_pasteboard_types (target_list) owner:owner];
-+ /* drag will begin in an idle handler to avoid nested run loops */
-
-- /* Ref the context. It's unreffed when the drag has been aborted */
-- g_object_ref (info->context);
-+ g_idle_add_full (G_PRIORITY_HIGH_IDLE, gtk_drag_begin_idle, context, NULL);
-
-- nswindow = get_toplevel_nswindow (widget);
-+ gdk_pointer_ungrab (0);
-
-- /* FIXME: If the event isn't a mouse event, use the global cursor position instead */
-- nsevent = [nswindow currentEvent];
-- point = [nsevent locationInWindow];
--
-- [nswindow dragImage:_gtk_quartz_create_image_from_pixbuf (info->icon_pixbuf)
-- at:point
-- offset:NSMakeSize(0, 0)
-- event:nsevent
-- pasteboard:pasteboard
-- source:nswindow
-- slideBack:YES];
--
-- return info->context;
-+ return context;
- }
-
- GdkDragContext *
-@@ -1668,7 +1723,20 @@
- gint hot_x,
- gint hot_y)
- {
-- g_warning ("gtk_drag_set_icon_pixmap is not supported on Mac OS X");
-+ GdkPixbuf *pixbuf;
-+
-+ g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
-+ g_return_if_fail (context->is_source);
-+ g_return_if_fail (GDK_IS_COLORMAP (colormap));
-+ g_return_if_fail (GDK_IS_PIXMAP (pixmap));
-+
-+ pixbuf = gdk_pixbuf_get_from_drawable (NULL, pixmap, colormap,
-+ 0, 0, /* src */
-+ 0, 0, /* dst */
-+ -1, -1);
-+
-+ gtk_drag_set_icon_pixbuf (context, pixbuf, hot_x, hot_y);
-+ g_object_unref (pixbuf);
- }
-
- /**
-@@ -1760,6 +1828,9 @@
- g_signal_emit_by_name (info->widget, "drag-end",
- info->context);
-
-+ if (info->source_widget)
-+ g_object_unref (info->source_widget);
-+
- if (info->widget)
- g_object_unref (info->widget);
-
-@@ -1781,6 +1852,10 @@
- static void
- gtk_drag_drop_finished (GtkDragSourceInfo *info)
- {
-+ if (info->success && info->delete)
-+ g_signal_emit_by_name (info->source_widget, "drag-data-delete",
-+ info->context);
-+
- /* Workaround for the fact that the NS API blocks until the drag is
- * over. This way the context is still valid when returning from
- * drag_begin, even if it will still be quite useless. See bug #501588.
-Index: gdk/quartz/gdkevents-quartz.c
-===================================================================
---- gdk/quartz/gdkevents-quartz.c (revision 21770)
-+++ gdk/quartz/gdkevents-quartz.c (working copy)
-@@ -112,6 +112,18 @@
- return ((GdkEventPrivate *) event)->windowing_data;
- }
-
-+/* A category that exposes the protected carbon event for an NSEvent. */
-+@interface NSEvent (GdkQuartzNSEvent)
-+- (void *)gdk_quartz_event_ref;
-+@end
-+
-+@implementation NSEvent (GdkQuartzNSEvent)
-+- (void *)gdk_quartz_event_ref
-+{
-+ return _eventRef;
-+}
-+@end
-+
- void
- _gdk_events_init (void)
- {
-@@ -1668,6 +1680,65 @@
- }
-
- static gboolean
-+_gdk_quartz_possibly_forward_accelerator (NSEvent* nsevent)
-+{
-+ /* Special-case menu shortcut events. We create command events for
-+ * those and forward to the corresponding menu.
-+ */
-+ if ((!_gdk_quartz_keyboard_grab_window ||
-+ (_gdk_quartz_keyboard_grab_window && keyboard_grab_owner_events)) &&
-+ [nsevent type] == NSKeyDown)
-+ {
-+ EventRef event_ref;
-+ MenuRef menu_ref;
-+ MenuItemIndex index;
-+
-+ event_ref = [nsevent gdk_quartz_event_ref];
-+ if (IsMenuKeyEvent (NULL, event_ref,
-+ kMenuEventQueryOnly,
-+ &menu_ref, &index))
-+ {
-+ MenuCommand menu_command;
-+ HICommand hi_command;
-+
-+ if (GetMenuItemCommandID (menu_ref, index, &menu_command) != noErr)
-+ return FALSE;
-+
-+ hi_command.commandID = menu_command;
-+ hi_command.menu.menuRef = menu_ref;
-+ hi_command.menu.menuItemIndex = index;
-+
-+ CreateEvent (NULL, kEventClassCommand, kEventCommandProcess,
-+ 0, kEventAttributeUserEvent, &event_ref);
-+ SetEventParameter (event_ref, kEventParamDirectObject,
-+ typeHICommand,
-+ sizeof (HICommand), &hi_command);
-+
-+ SendEventToEventTarget (event_ref, GetMenuEventTarget (menu_ref));
-+
-+ ReleaseEvent (event_ref);
-+
-+ return TRUE;
-+ }
-+ }
-+ return FALSE;
-+}
-+
-+gboolean
-+gdk_quartz_possibly_forward (GdkEvent* event)
-+{
-+ NSEvent *nsevent;
-+ g_return_val_if_fail (event != NULL, FALSE);
-+
-+ nsevent = ((GdkEventPrivate*)event)->windowing_data;
-+
-+ if (nsevent)
-+ return _gdk_quartz_possibly_forward_accelerator (nsevent);
-+
-+ return FALSE;
-+}
-+
-+static gboolean
- gdk_event_translate (NSEvent *nsevent)
- {
- NSWindow *nswindow;
-Index: gdk/quartz/gdkdnd-quartz.c
-===================================================================
---- gdk/quartz/gdkdnd-quartz.c (revision 21770)
-+++ gdk/quartz/gdkdnd-quartz.c (working copy)
-@@ -101,6 +101,12 @@
-
- GdkDragContext *_gdk_quartz_drag_source_context = NULL;
-
-+GdkDragContext*
-+gdk_quartz_drag_source_context()
-+{
-+ return _gdk_quartz_drag_source_context;
-+}
-+
- GdkDragContext *
- gdk_drag_begin (GdkWindow *window,
- GList *targets)
-Index: gdk/quartz/GdkQuartzWindow.c
-===================================================================
---- gdk/quartz/GdkQuartzWindow.c (revision 21770)
-+++ gdk/quartz/GdkQuartzWindow.c (working copy)
-@@ -461,8 +461,29 @@
- {
- GdkDragAction result = 0;
-
-+ /* GDK and Quartz drag operations do not map 1:1.
-+ This mapping represents about the best that we
-+ can come up.
-+
-+ Note that NSDragOperationPrivate and GDK_ACTION_PRIVATE
-+ have almost opposite meanings: the GDK one means that the
-+ destination is solely responsible for the action; the Quartz
-+ one means that the source and destination will agree
-+ privately on the action. NSOperationGeneric is close in meaning
-+ to GDK_ACTION_PRIVATE but there is a problem: it will be
-+ sent for any ordinary drag, and likely not understood
-+ by any intra-widget drag (since the source & dest are the
-+ same)
-+ */
-+
- if (operation & NSDragOperationGeneric)
-+ result |= GDK_ACTION_MOVE;
-+ if (operation & NSDragOperationCopy)
- result |= GDK_ACTION_COPY;
-+ if (operation & NSDragOperationMove)
-+ result |= GDK_ACTION_MOVE;
-+ if (operation & NSDragOperationLink)
-+ result |= GDK_ACTION_LINK;
-
- return result;
- }
-@@ -474,6 +495,10 @@
-
- if (action & GDK_ACTION_COPY)
- result |= NSDragOperationCopy;
-+ if (action & GDK_ACTION_LINK)
-+ result |= NSDragOperationLink;
-+ if (action & GDK_ACTION_MOVE)
-+ result |= NSDragOperationMove;
-
- return result;
- }
-@@ -485,6 +510,7 @@
-
- GDK_DRAG_CONTEXT_PRIVATE (current_context)->dragging_info = sender;
- current_context->suggested_action = drag_operation_to_drag_action ([sender draggingSourceOperationMask]);
-+ current_context->actions = current_context->suggested_action;
- }
-
- - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
-@@ -510,6 +536,10 @@
-
- - (void)draggingEnded:(id <NSDraggingInfo>)sender
- {
-+ /* leave a note for the source about what action was taken */
-+ if (_gdk_quartz_drag_source_context && current_context)
-+ _gdk_quartz_drag_source_context->action = current_context->action;
-+
- if (current_context)
- g_object_unref (current_context);
- current_context = NULL;