~ubuntu-branches/ubuntu/dapper/file-roller/dapper-updates

« back to all changes in this revision

Viewing changes to src/eggtreemultidnd.c

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Holbach
  • Date: 2006-04-11 08:44:59 UTC
  • mto: This revision was merged to the branch mainline in revision 11.
  • Revision ID: james.westby@ubuntu.com-20060411084459-9r22188ftese2ev2
Tags: upstream-2.14.1
ImportĀ upstreamĀ versionĀ 2.14.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
47
47
  guint   button_release_handler;
48
48
  guint   drag_data_get_handler;
49
49
  GSList *event_list;
 
50
  gboolean pending_event;
50
51
} EggTreeMultiDndData;
51
52
 
52
53
 
177
178
  
178
179
  g_slist_free (priv_data->event_list);
179
180
  priv_data->event_list = NULL;
 
181
  priv_data->pending_event = FALSE;
180
182
 
181
183
  g_signal_handler_disconnect (widget, priv_data->motion_notify_handler);
182
184
  g_signal_handler_disconnect (widget, priv_data->button_release_handler);
311
313
 
312
314
          context = gtk_drag_begin (widget,
313
315
                                    target_list,
314
 
                                    GDK_ACTION_COPY,
 
316
                                    GDK_ACTION_MOVE,
315
317
                                    priv_data->pressed_button,
316
318
                                    (GdkEvent*)event);
317
319
          set_context_data (context, path_list);
344
346
  if (event->window != gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)))
345
347
    return FALSE;
346
348
 
 
349
  if (event->button == 3)
 
350
    return FALSE;
 
351
 
347
352
  tree_view = GTK_TREE_VIEW (widget);
348
353
  priv_data = g_object_get_data (G_OBJECT (tree_view), EGG_TREE_MULTI_DND_STRING);
349
354
  if (priv_data == NULL)
350
355
    {
351
356
      priv_data = g_new0 (EggTreeMultiDndData, 1);
 
357
      priv_data->pending_event = FALSE;
352
358
      g_object_set_data (G_OBJECT (tree_view), 
353
359
                         EGG_TREE_MULTI_DND_STRING, 
354
360
                         priv_data);
357
363
  if (g_slist_find (priv_data->event_list, event)) 
358
364
    return FALSE;
359
365
 
360
 
  if (priv_data->event_list) 
 
366
  if (priv_data->pending_event) 
361
367
    {
362
368
      /* save the event to be propagated in order */
363
369
      priv_data->event_list = g_slist_append (priv_data->event_list, 
375
381
 
376
382
  selection = gtk_tree_view_get_selection (tree_view);
377
383
 
378
 
  if (path && gtk_tree_selection_path_is_selected (selection, path))
 
384
  if (path)
 
385
    {
 
386
      gboolean call_parent = (event->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK) ||
 
387
                              !gtk_tree_selection_path_is_selected (selection, path) ||
 
388
                              event->button != 1);
 
389
      
 
390
      if (call_parent)
 
391
        (GTK_WIDGET_GET_CLASS (tree_view))->button_press_event (widget, event);
 
392
      
 
393
      if (gtk_tree_selection_path_is_selected (selection, path))
379
394
    {
380
395
      priv_data->pressed_button = event->button;
381
396
      priv_data->x = event->x;
382
397
      priv_data->y = event->y;
383
 
      priv_data->event_list = g_slist_append (priv_data->event_list, 
384
 
                                              gdk_event_copy ((GdkEvent*)event));
 
398
 
 
399
      priv_data->pending_event = TRUE;
 
400
      if (!call_parent)
 
401
        priv_data->event_list = g_slist_append (priv_data->event_list, 
 
402
                                                gdk_event_copy ((GdkEvent*)event));
385
403
 
386
404
      priv_data->motion_notify_handler = 
387
405
        g_signal_connect (G_OBJECT (tree_view), 
402
420
                              G_CALLBACK (egg_tree_multi_drag_drag_data_get), 
403
421
                              NULL);
404
422
        }
 
423
    }
405
424
 
406
425
      gtk_tree_path_free (path);
407
 
      
 
426
      /* We called the default handler so we don't let the default handler run */
408
427
      return TRUE;
409
428
    }
410
 
 
411
 
  if (path) 
412
 
    {
413
 
      gtk_tree_path_free (path);
414
 
    }
415
429
  
416
430
  return FALSE;
417
431
}