1 Index: gtk/gtktreeview.c
2 ===================================================================
3 --- gtk/gtktreeview.c (revision 21475)
4 +++ gtk/gtktreeview.c (working copy)
11 + GtkTreeModel* model;
16 gboolean row_double_click = FALSE;
18 gboolean node_selected;
19 + gboolean edits_allowed;
22 if (tree_view->priv->tree == NULL)
23 @@ -2643,9 +2647,17 @@
25 tree_view->priv->focus_column = column;
29 + if (g_object_get_data (G_OBJECT(tree_view), "mouse-edits-require-mod1")) {
30 + edits_allowed = (event->state & GDK_MOD1_MASK);
32 + /* regular GTK design: do edits if none of the default modifiers are active */
33 + edits_allowed = !(event->state & gtk_accelerator_get_default_mod_mask ());
36 /* decide if we edit */
37 - if (event->type == GDK_BUTTON_PRESS && event->button == 1 &&
38 - !(event->state & gtk_accelerator_get_default_mod_mask ()))
39 + if (event->type == GDK_BUTTON_PRESS && event->button == 1 && edits_allowed)
44 if (tree_view->priv->button_pressed_node == tree_view->priv->prelight_node &&
45 GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_ARROW_PRELIT))
47 - GtkTreePath *path = NULL;
49 + GtkTreePath *path = NULL;
50 path = _gtk_tree_view_find_path (tree_view,
51 tree_view->priv->button_pressed_tree,
52 tree_view->priv->button_pressed_node);
53 @@ -6967,6 +6978,19 @@
57 +#ifdef GDK_WINDOWING_QUARTZ
60 +gtk_tree_view_catch_drag_begin (GtkWidget* widget,
61 + GdkDragContext* context,
64 + TreeViewDragInfo* drag_info = (TreeViewDragInfo*) user_data;
65 + set_source_row (context, drag_info->model, drag_info->path);
71 gtk_tree_view_maybe_begin_dragging_row (GtkTreeView *tree_view,
72 GdkEventMotion *event)
76 gboolean retval = FALSE;
79 di = get_info (tree_view);
81 @@ -7025,13 +7050,26 @@
85 +#ifdef GDK_WINDOWING_QUARTZ
87 + /* catch drag-being signal */
90 + drag_begin_id = g_signal_connect (tree_view, "drag-begin", G_CALLBACK (gtk_tree_view_catch_drag_begin), (gpointer) di);
93 context = gtk_drag_begin (widget,
94 gtk_drag_source_get_target_list (widget),
99 +#ifndef GDK_WINDOWING_QUARTZ
100 set_source_row (context, model, path);
102 + /* disconnect drag-begin and catch drag-end */
103 + g_signal_handler_disconnect (tree_view, drag_begin_id);
108 Index: gtk/gtkquartz.c
109 ===================================================================
110 --- gtk/gtkquartz.c (revision 21475)
111 +++ gtk/gtkquartz.c (working copy)
113 #include "gtkalias.h"
116 +_gtk_quartz_create_image_from_drawable (GdkDrawable* drawable)
119 + NSImage* image = NULL;
121 + pixbuf = gdk_pixbuf_get_from_drawable (NULL, drawable, NULL,
126 + image = _gtk_quartz_create_image_from_pixbuf (pixbuf);
133 _gtk_quartz_create_image_from_pixbuf (GdkPixbuf *pixbuf)
135 CGColorSpaceRef colorspace;
136 Index: gtk/gtkquartz.h
137 ===================================================================
138 --- gtk/gtkquartz.h (revision 21475)
139 +++ gtk/gtkquartz.h (working copy)
141 GtkSelectionData *selection_data);
143 NSImage *_gtk_quartz_create_image_from_pixbuf (GdkPixbuf *pixbuf);
144 +NSImage *_gtk_quartz_create_image_from_drawable (GdkDrawable *drawable);
148 Index: gtk/gtkdnd-quartz.c
149 ===================================================================
150 --- gtk/gtkdnd-quartz.c (revision 21475)
151 +++ gtk/gtkdnd-quartz.c (working copy)
152 @@ -1086,13 +1086,13 @@
155 pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, 1, 1);
156 - gdk_pixbuf_fill (pixbuf, 0xffffff);
158 - gtk_drag_set_icon_pixbuf (context,
160 + gdk_pixbuf_fill (pixbuf, 0xffffff);
162 + gtk_drag_set_icon_pixbuf (context,
166 - g_object_unref (pixbuf);
167 + g_object_unref (pixbuf);
170 case GTK_IMAGE_PIXBUF:
171 @@ -1668,7 +1668,20 @@
175 - g_warning ("gtk_drag_set_icon_pixmap is not supported on Mac OS X");
178 + g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
179 + g_return_if_fail (context->is_source);
180 + g_return_if_fail (GDK_IS_COLORMAP (colormap));
181 + g_return_if_fail (GDK_IS_PIXMAP (pixmap));
183 + pixbuf = gdk_pixbuf_get_from_drawable (NULL, pixmap, colormap,
188 + gtk_drag_set_icon_pixbuf (context, pixbuf, hot_x, hot_y);
189 + g_object_unref (pixbuf);
193 Index: gdk/quartz/gdkevents-quartz.c
194 ===================================================================
195 --- gdk/quartz/gdkevents-quartz.c (revision 21475)
196 +++ gdk/quartz/gdkevents-quartz.c (working copy)
198 return ((GdkEventPrivate *) event)->windowing_data;
201 +/* A category that exposes the protected carbon event for an NSEvent. */
202 +@interface NSEvent (GdkQuartzNSEvent)
203 +- (void *)gdk_quartz_event_ref;
206 +@implementation NSEvent (GdkQuartzNSEvent)
207 +- (void *)gdk_quartz_event_ref
214 _gdk_events_init (void)
216 @@ -1670,6 +1682,65 @@
220 +_gdk_quartz_possibly_forward_accelerator (NSEvent* nsevent)
222 + /* Special-case menu shortcut events. We create command events for
223 + * those and forward to the corresponding menu.
225 + if ((!_gdk_quartz_keyboard_grab_window ||
226 + (_gdk_quartz_keyboard_grab_window && keyboard_grab_owner_events)) &&
227 + [nsevent type] == NSKeyDown)
229 + EventRef event_ref;
231 + MenuItemIndex index;
233 + event_ref = [nsevent gdk_quartz_event_ref];
234 + if (IsMenuKeyEvent (NULL, event_ref,
235 + kMenuEventQueryOnly,
236 + &menu_ref, &index))
238 + MenuCommand menu_command;
239 + HICommand hi_command;
241 + if (GetMenuItemCommandID (menu_ref, index, &menu_command) != noErr)
244 + hi_command.commandID = menu_command;
245 + hi_command.menu.menuRef = menu_ref;
246 + hi_command.menu.menuItemIndex = index;
248 + CreateEvent (NULL, kEventClassCommand, kEventCommandProcess,
249 + 0, kEventAttributeUserEvent, &event_ref);
250 + SetEventParameter (event_ref, kEventParamDirectObject,
252 + sizeof (HICommand), &hi_command);
254 + SendEventToEventTarget (event_ref, GetMenuEventTarget (menu_ref));
256 + ReleaseEvent (event_ref);
265 +gdk_quartz_possibly_forward (GdkEvent* event)
268 + g_return_val_if_fail (event != NULL, FALSE);
270 + nsevent = ((GdkEventPrivate*)event)->windowing_data;
273 + return _gdk_quartz_possibly_forward_accelerator (nsevent);
279 gdk_event_translate (NSEvent *nsevent)