Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 30941
Collapse All | Expand All

(-)gtk+-2.2.1/gtk/gtkmenu.c.menushadow (-5 / +456 lines)
Lines 48-53 Link Here
48
48
49
#define DEFAULT_POPUP_DELAY    225
49
#define DEFAULT_POPUP_DELAY    225
50
#define DEFAULT_POPDOWN_DELAY  1000
50
#define DEFAULT_POPDOWN_DELAY  1000
51
#define DEFAULT_SHADOW_DELAY   50
51
52
52
#define NAVIGATION_REGION_OVERSHOOT 50  /* How much the navigation region
53
#define NAVIGATION_REGION_OVERSHOOT 50  /* How much the navigation region
53
					 * extends below the submenu
54
					 * extends below the submenu
Lines 74-79 Link Here
74
  gboolean have_position;
75
  gboolean have_position;
75
  gint x;
76
  gint x;
76
  gint y;
77
  gint y;
78
  GdkPixbuf *east, *south;
79
  GdkWindow *east_shadow, *south_shadow;
80
  guint32 timeout_id;
77
};
81
};
78
82
79
enum {
83
enum {
Lines 86-91 Link Here
86
  PROP_TEAROFF_TITLE
90
  PROP_TEAROFF_TITLE
87
};
91
};
88
92
93
enum side {
94
  EAST_SIDE,
95
  SOUTH_SIDE
96
};
97
98
const double shadow_strip_l[5] = {
99
  .937, .831, .670, .478, .180
100
};
101
102
const double bottom_left_corner[25] = {
103
  1.00, .682, .423, .333, .258,
104
  1.00, .898, .800, .682, .584, 
105
  1.00, .937, .874, .800, .737, 
106
  1.00, .968, .937, .898, .866,
107
  1.00, .988, .976, .960, .945
108
};
109
110
const double bottom_right_corner[25] = {
111
  .258, .584, .737, .866, .945,
112
  .584, .682, .800, .898, .960,
113
  .737, .800, .874, .937, .976,
114
  .866, .898, .937, .968, .988,
115
  .945, .960, .976, .988, .996 
116
};
117
118
const double top_right_corner[25] = {
119
  1.00, 1.00, 1.00, 1.00, 1.00, 
120
  .686, .898, .937, .968, .988, 
121
  .423, .803, .874, .937, .976, 
122
  .333, .686, .800, .898, .960,
123
  .258, .584, .737, .866, .945
124
};
125
126
const double top_left_corner[25] = {
127
  .988, .968, .937, .898, .498,
128
  .976, .937, .874, .803, .423, 
129
  .960, .898, .800, .686, .333, 
130
  .945, .866, .737, .584, .258,
131
  .941, .847, .698, .521, .215
132
}; 
133
134
static GdkPixbuf *get_pixbuf               (GtkMenu *menu,
135
					    int x,
136
					    int y,
137
					    int width,
138
					    int height);
139
static void     shadow_paint               (GtkWidget *widget,
140
					    GdkRectangle *area, 
141
					    enum side shadow);
142
static void     pixbuf_add_shadow          (GdkPixbuf *pb,
143
					    enum side shadow);
144
static gboolean map_shadow_windows         (gpointer data);
145
static void     shadow_add_timeout         (GtkWidget *widget);
146
static void     shadow_remove_timeout      (GtkWidget *widget);
89
static void     gtk_menu_class_init        (GtkMenuClass     *klass);
147
static void     gtk_menu_class_init        (GtkMenuClass     *klass);
90
static void     gtk_menu_init              (GtkMenu          *menu);
148
static void     gtk_menu_init              (GtkMenu          *menu);
91
static void     gtk_menu_set_property      (GObject      *object,
149
static void     gtk_menu_set_property      (GObject      *object,
Lines 181-186 Link Here
181
239
182
static guint menu_signals[LAST_SIGNAL] = { 0 };
240
static guint menu_signals[LAST_SIGNAL] = { 0 };
183
241
242
static void
243
free_private_data (gpointer data)
244
{
245
  GtkMenuPrivate *private = (GtkMenuPrivate *) data;
246
247
  if (private->timeout_id > 0) 
248
    g_source_remove (private->timeout_id);
249
  
250
  g_free (data);
251
}
252
184
GtkMenuPrivate *
253
GtkMenuPrivate *
185
gtk_menu_get_private (GtkMenu *menu)
254
gtk_menu_get_private (GtkMenu *menu)
186
{
255
{
Lines 198-204 Link Here
198
      private->have_position = FALSE;
267
      private->have_position = FALSE;
199
      
268
      
200
      g_object_set_qdata_full (G_OBJECT (menu), private_quark,
269
      g_object_set_qdata_full (G_OBJECT (menu), private_quark,
201
			       private, g_free);
270
			       private, free_private_data);
202
    }
271
    }
203
272
204
  return private;
273
  return private;
Lines 231-236 Link Here
231
  return menu_type;
300
  return menu_type;
232
}
301
}
233
302
303
static GdkPixbuf *
304
get_pixbuf (GtkMenu *menu,
305
	    int x,
306
	    int y,
307
	    int width,
308
	    int height)
309
{
310
  GdkPixbuf *dest, *src;
311
  GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET(menu));
312
  GdkWindow *root = gdk_screen_get_root_window (screen);
313
  gint screen_height = gdk_screen_get_height (screen);
314
  gint screen_width = gdk_screen_get_width (screen);
315
  gint original_width = width;
316
  gint original_height = height;
317
    
318
  if (x < 0) 
319
    {
320
      width += x;
321
      x = 0;
322
    }
323
324
  if (y < 0) 
325
    {
326
      height += y;
327
      y = 0;
328
    }
329
330
  if (x + width > screen_width) 
331
    {
332
      width = screen_width - x;
333
    }
334
335
  if (y + height > screen_height) 
336
    {
337
      height = screen_height - y;
338
    }
339
340
  if (width <= 0 || height <= 0)
341
    return NULL;
342
343
  dest = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, 
344
                         original_width, original_height);
345
  src = gdk_pixbuf_get_from_drawable (NULL, root, NULL, x, y, 0, 0, 
346
                                      width, height);
347
  gdk_pixbuf_copy_area (src, 0, 0, width, height, dest, 0, 0);
348
349
  g_object_unref (G_OBJECT (src));
350
  
351
  return dest;
352
}
353
354
static void
355
shadow_paint(GtkWidget *widget, GdkRectangle *area, enum side shadow)
356
{
357
  GtkMenu *menu = GTK_MENU (widget);
358
  GtkMenuPrivate *private = gtk_menu_get_private (menu);
359
  gint width, height;
360
  GdkGC *gc = widget->style->black_gc;
361
362
  switch (shadow) 
363
    {
364
      case EAST_SIDE:
365
	if (private->east != NULL)
366
	  {
367
	    if (area)
368
	      gdk_gc_set_clip_rectangle (gc, area);
369
370
	    width = gdk_pixbuf_get_width (private->east);
371
	    height = gdk_pixbuf_get_height (private->east);
372
373
	    gdk_draw_pixbuf (private->east_shadow, gc, private->east, 0, 0, 0, 0,
374
			     width, height, GDK_RGB_DITHER_NONE, 0, 0);
375
376
	    if (area)
377
	      gdk_gc_set_clip_rectangle (gc, NULL);
378
	  }
379
	break;
380
      case SOUTH_SIDE:
381
	if (private->south != NULL)
382
	  {
383
	    if (area)
384
	      gdk_gc_set_clip_rectangle (gc, area);
385
386
	    width = gdk_pixbuf_get_width (private->south);
387
	    height = gdk_pixbuf_get_height (private->south);
388
389
	    gdk_draw_pixbuf (private->south_shadow, gc, private->south, 0, 0, 0, 0,
390
			     width, height, GDK_RGB_DITHER_NONE, 0, 0);
391
392
	    if (area)
393
	      gdk_gc_set_clip_rectangle (gc, NULL);
394
	  }
395
	break;
396
      default:
397
	break;
398
    }
399
}
400
401
static void
402
pixbuf_add_shadow (GdkPixbuf *pb,
403
	           enum side shadow)
404
{
405
  gint width, rowstride, height;
406
  gint i;
407
  guchar *pixels, *p;
408
409
  width = gdk_pixbuf_get_width (pb);
410
  height = gdk_pixbuf_get_height (pb);
411
  rowstride = gdk_pixbuf_get_rowstride (pb);
412
  pixels = gdk_pixbuf_get_pixels (pb);
413
414
  switch (shadow) 
415
    {
416
      case EAST_SIDE:
417
	if (height > 5) 
418
	  {
419
	    for (i = 0; i < width; i++) 
420
	      {
421
		gint j, k;
422
423
		p = pixels + (i * rowstride);
424
		for (j = 0, k = 0; j < 3 * width; j += 3, k++) 
425
		  {
426
		    p[j] = (guchar) (p[j] * top_right_corner [i * width + k]);
427
		    p[j + 1] = (guchar) (p[j + 1] * top_right_corner [i * width + k]);
428
		    p[j + 2] = (guchar) (p[j + 2] * top_right_corner [i * width + k]);
429
		  }
430
	      }
431
432
	    i = 5;
433
	  } 
434
	else 
435
	  {
436
	    i = 0;
437
	  }
438
439
	for (;i < height; i++) 
440
	  {
441
	    gint j, k;
442
443
	    p = pixels + (i * rowstride);
444
	    for (j = 0, k = 0; j < 3 * width; j += 3, k++) 
445
	      {
446
		p[j] = (guchar) (p[j] * shadow_strip_l[width - 1 - k]);
447
		p[j + 1] = (guchar) (p[j + 1] * shadow_strip_l[width - 1 - k]);
448
		p[j + 2] = (guchar) (p[j + 2] * shadow_strip_l[width - 1 - k]);
449
	      }
450
	  }
451
	break;
452
453
      case SOUTH_SIDE:
454
	for (i = 0; i < height; i++) 
455
	  {
456
	    gint j, k;
457
458
	    p = pixels + (i * rowstride);
459
	    for (j = 0, k = 0; j < 3 * height; j += 3, k++) 
460
	      {
461
462
		p[j] = (guchar) (p[j] * bottom_left_corner[i * height + k]);
463
		p[j + 1] = (guchar) (p[j + 1] * bottom_left_corner[i * height + k]);
464
		p[j + 2] = (guchar) (p[j + 2] * bottom_left_corner[i * height + k]);
465
	      }
466
467
	    p = pixels + (i * rowstride) + 3 * height;
468
	    for (j = 0, k = 0; j < (width * 3) - (6 * height); j += 3, k++)
469
	      {
470
		p[j] = (guchar) (p[j] * bottom_right_corner [i * height]);
471
		p[j + 1] = (guchar) (p[j + 1] * bottom_right_corner [i * height]);
472
		p[j + 2] = (guchar) (p[j + 2] * bottom_right_corner [i * height]);
473
	      }
474
475
	    p = pixels + (i * rowstride) + ((width * 3) - (3 * height));
476
	    for (j = 0, k = 0; j < 3 * height; j += 3, k++) 
477
	      {
478
		p[j] = (guchar) (p[j] * bottom_right_corner[i * height + k]);
479
		p[j + 1] = (guchar) (p[j + 1] * bottom_right_corner[i * height + k]);
480
		p[j + 2] = (guchar) (p[j + 2] * bottom_right_corner[i * height + k]);
481
	      }
482
	  }
483
	break;
484
485
      default:
486
	break;
487
    }
488
}
489
490
static gboolean
491
map_shadow_windows (gpointer data)
492
{
493
  GtkMenu *menu = GTK_MENU (data);
494
  GtkMenuPrivate *private = gtk_menu_get_private (menu);
495
  GtkWidget *widget = GTK_WIDGET (data);
496
  GdkPixbuf *pixbuf;
497
498
  pixbuf = get_pixbuf (menu, 
499
		       private->x + widget->allocation.width, private->y,
500
		       5, widget->allocation.height);
501
  if (pixbuf != NULL) 
502
    {
503
      pixbuf_add_shadow (pixbuf, EAST_SIDE);
504
      if (private->east != NULL) 
505
	{
506
	  g_object_unref (G_OBJECT (private->east));
507
	}
508
      private->east = pixbuf;
509
    }
510
  
511
  pixbuf = get_pixbuf (menu, 
512
		       private->x, private->y + widget->allocation.height,
513
		       widget->allocation.width + 5, 5);
514
  if (pixbuf != NULL) 
515
    {
516
      pixbuf_add_shadow (pixbuf, SOUTH_SIDE);
517
      if (private->south != NULL) 
518
	{
519
	  g_object_unref (G_OBJECT (private->south));
520
	}
521
      private->south = pixbuf;
522
    }
523
524
  gdk_window_move_resize (private->east_shadow, 
525
			  private->x + widget->allocation.width, private->y, 
526
			  5, widget->allocation.height);
527
528
  gdk_window_move_resize (private->south_shadow, 
529
			  private->x, private->y + widget->allocation.height, 
530
			  widget->allocation.width + 5, 5);
531
532
  gdk_window_show (private->east_shadow);
533
  gdk_window_show (private->south_shadow);
534
535
  shadow_paint(widget, NULL, EAST_SIDE);
536
  shadow_paint(widget, NULL, SOUTH_SIDE);
537
538
  private->timeout_id = 0;
539
  return FALSE;
540
}
541
542
static void
543
shadow_add_timeout(GtkWidget *widget)
544
{
545
  GtkMenuPrivate *private = gtk_menu_get_private (GTK_MENU (widget));
546
  gboolean menu_shadow;
547
  gint shadow_delay;
548
549
  if (private->have_position)
550
    {
551
      g_object_get (G_OBJECT (gtk_widget_get_settings (widget)),
552
		"gtk-menu-drop-shadow", &menu_shadow, NULL);
553
554
      if (menu_shadow)
555
	{
556
	  if (private->timeout_id > 0) 
557
	    {
558
	      g_source_remove (private->timeout_id);
559
	    } 
560
561
562
	  g_object_get (G_OBJECT (gtk_widget_get_settings (widget)),
563
			"gtk-menu-shadow-delay", &shadow_delay,
564
			NULL);
565
566
	  private->timeout_id = g_timeout_add (shadow_delay, map_shadow_windows, widget);
567
	}
568
    }
569
}
570
571
static void
572
shadow_remove_timeout (GtkWidget *widget)
573
{
574
  GtkMenu *menu = GTK_MENU (widget);
575
  GtkMenuPrivate *private = gtk_menu_get_private (menu);
576
577
  if (private->timeout_id > 0) 
578
    {
579
      g_source_remove (private->timeout_id);
580
      private->timeout_id = 0;
581
    } 
582
  else 
583
    {
584
      if (private->east_shadow)
585
	gdk_window_hide (private->east_shadow);
586
	
587
      if (private->south_shadow)
588
	gdk_window_hide (private->south_shadow);
589
590
      if (private->east)
591
        {
592
          g_object_unref (G_OBJECT (private->east));
593
          private->east = NULL;
594
        }
595
596
      if (private->south)
597
        {
598
          g_object_unref (G_OBJECT (private->south));
599
          private->south = NULL;
600
        }
601
    }
602
}
603
234
static void
604
static void
235
gtk_menu_class_init (GtkMenuClass *class)
605
gtk_menu_class_init (GtkMenuClass *class)
236
{
606
{
Lines 397-402 Link Here
397
						   DEFAULT_POPDOWN_DELAY,
767
						   DEFAULT_POPDOWN_DELAY,
398
						   G_PARAM_READWRITE));
768
						   G_PARAM_READWRITE));
399
						   
769
						   
770
  gtk_settings_install_property (g_param_spec_boolean ("gtk-menu-drop-shadow",
771
						       _("Display menu drop-shadow"),
772
						       _("Whether menu drop-shadow should be displayed"),
773
						       TRUE,
774
						       G_PARAM_READWRITE));
775
776
  gtk_settings_install_property (g_param_spec_int ("gtk-menu-shadow-delay",
777
						   _("Delay before drop-shadow appear"),
778
						   _("Minimum time before drop-shadow appear under the menu"),
779
						   0,
780
						   G_MAXINT,
781
						   DEFAULT_SHADOW_DELAY,
782
						   G_PARAM_READWRITE));
783
400
}
784
}
401
785
402
786
Lines 488-493 Link Here
488
static void
872
static void
489
gtk_menu_init (GtkMenu *menu)
873
gtk_menu_init (GtkMenu *menu)
490
{
874
{
875
  GtkMenuPrivate *private = gtk_menu_get_private (menu);
876
491
  menu->parent_menu_item = NULL;
877
  menu->parent_menu_item = NULL;
492
  menu->old_active_menu_item = NULL;
878
  menu->old_active_menu_item = NULL;
493
  menu->accel_group = NULL;
879
  menu->accel_group = NULL;
Lines 532-537 Link Here
532
  menu->upper_arrow_prelight = FALSE;
918
  menu->upper_arrow_prelight = FALSE;
533
  menu->lower_arrow_prelight = FALSE;
919
  menu->lower_arrow_prelight = FALSE;
534
  
920
  
921
  private->east_shadow = NULL;
922
  private->south_shadow = NULL;
923
  
924
  private->east = NULL;
925
  private->south = NULL;
926
  
927
  private->timeout_id = 0;
928
535
  MENU_NEEDS_RESIZE (menu) = TRUE;
929
  MENU_NEEDS_RESIZE (menu) = TRUE;
536
}
930
}
537
931
Lines 594-599 Link Here
594
menu_change_screen (GtkMenu   *menu,
988
menu_change_screen (GtkMenu   *menu,
595
		    GdkScreen *new_screen)
989
		    GdkScreen *new_screen)
596
{
990
{
991
  shadow_remove_timeout(GTK_WIDGET(menu));
597
  if (menu->torn_off)
992
  if (menu->torn_off)
598
    {
993
    {
599
      gtk_window_set_screen (GTK_WINDOW (menu->tearoff_window), new_screen);
994
      gtk_window_set_screen (GTK_WINDOW (menu->tearoff_window), new_screen);
Lines 994-999 Link Here
994
  if (xgrab_shell == widget)
1389
  if (xgrab_shell == widget)
995
    popup_grab_on_window (widget->window, activate_time); /* Should always succeed */
1390
    popup_grab_on_window (widget->window, activate_time); /* Should always succeed */
996
1391
1392
  shadow_add_timeout(GTK_WIDGET (menu));
997
  gtk_grab_add (GTK_WIDGET (menu));
1393
  gtk_grab_add (GTK_WIDGET (menu));
998
}
1394
}
999
1395
Lines 1004-1010 Link Here
1004
  GtkMenuShell *menu_shell;
1400
  GtkMenuShell *menu_shell;
1005
1401
1006
  g_return_if_fail (GTK_IS_MENU (menu));
1402
  g_return_if_fail (GTK_IS_MENU (menu));
1007
  
1403
1008
  menu_shell = GTK_MENU_SHELL (menu);
1404
  menu_shell = GTK_MENU_SHELL (menu);
1009
  private = gtk_menu_get_private (menu);
1405
  private = gtk_menu_get_private (menu);
1010
  
1406
  
Lines 1068-1073 Link Here
1068
  menu_shell->have_xgrab = FALSE;
1464
  menu_shell->have_xgrab = FALSE;
1069
  gtk_grab_remove (GTK_WIDGET (menu));
1465
  gtk_grab_remove (GTK_WIDGET (menu));
1070
1466
1467
  shadow_remove_timeout(GTK_WIDGET (menu));
1071
  menu_grab_transfer_window_destroy (menu);
1468
  menu_grab_transfer_window_destroy (menu);
1072
}
1469
}
1073
1470
Lines 1473-1482 Link Here
1473
  if (GTK_WIDGET_REALIZED (widget))
1870
  if (GTK_WIDGET_REALIZED (widget))
1474
    {
1871
    {
1475
      GtkMenu *menu = GTK_MENU (widget);
1872
      GtkMenu *menu = GTK_MENU (widget);
1873
      GtkMenuPrivate *private;
1476
      
1874
      
1875
      private = gtk_menu_get_private (menu);
1876
1477
      gtk_style_set_background (widget->style, menu->bin_window, GTK_STATE_NORMAL);
1877
      gtk_style_set_background (widget->style, menu->bin_window, GTK_STATE_NORMAL);
1478
      gtk_style_set_background (widget->style, menu->view_window, GTK_STATE_NORMAL);
1878
      gtk_style_set_background (widget->style, menu->view_window, GTK_STATE_NORMAL);
1479
      gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
1879
      gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
1880
1881
      gdk_window_set_back_pixmap (private->east_shadow, NULL, FALSE);
1882
      gdk_window_set_back_pixmap (private->south_shadow, NULL, FALSE);
1480
    }
1883
    }
1481
}
1884
}
1482
1885
Lines 1487-1498 Link Here
1487
  gint attributes_mask;
1890
  gint attributes_mask;
1488
  gint border_width;
1891
  gint border_width;
1489
  GtkMenu *menu;
1892
  GtkMenu *menu;
1893
  GtkMenuPrivate *private;
1490
  GtkWidget *child;
1894
  GtkWidget *child;
1491
  GList *children;
1895
  GList *children;
1492
1896
  
1493
  g_return_if_fail (GTK_IS_MENU (widget));
1897
  g_return_if_fail (GTK_IS_MENU (widget));
1494
1898
1495
  menu = GTK_MENU (widget);
1899
  menu = GTK_MENU (widget);
1900
  private = gtk_menu_get_private (menu);
1496
  
1901
  
1497
  GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
1902
  GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
1498
  
1903
  
Lines 1558-1563 Link Here
1558
1963
1559
  gdk_window_show (menu->bin_window);
1964
  gdk_window_show (menu->bin_window);
1560
  gdk_window_show (menu->view_window);
1965
  gdk_window_show (menu->view_window);
1966
1967
  /* Drop shadow */
1968
1969
  attributes.window_type = GDK_WINDOW_TEMP;
1970
  attributes.override_redirect = TRUE;
1971
1972
  attributes_mask = GDK_WA_NOREDIR | GDK_WA_VISUAL | GDK_WA_COLORMAP;
1973
  
1974
  /* East drop shadow */
1975
  private->east_shadow = gdk_window_new (gtk_widget_get_root_window (widget), 
1976
                                         &attributes, attributes_mask);
1977
  gdk_window_set_user_data (private->east_shadow, menu);
1978
  gdk_window_set_back_pixmap (private->east_shadow, NULL, FALSE);
1979
  
1980
  /* South drop shadow */
1981
  private->south_shadow = gdk_window_new (gtk_widget_get_root_window (widget), 
1982
                                          &attributes, attributes_mask);
1983
  gdk_window_set_user_data (private->south_shadow, menu);
1984
  gdk_window_set_back_pixmap (private->south_shadow, NULL, FALSE);
1561
}
1985
}
1562
1986
1563
static gboolean 
1987
static gboolean 
Lines 1620-1629 Link Here
1620
gtk_menu_unrealize (GtkWidget *widget)
2044
gtk_menu_unrealize (GtkWidget *widget)
1621
{
2045
{
1622
  GtkMenu *menu;
2046
  GtkMenu *menu;
2047
  GtkMenuPrivate *private;
1623
2048
1624
  g_return_if_fail (GTK_IS_MENU (widget));
2049
  g_return_if_fail (GTK_IS_MENU (widget));
1625
2050
1626
  menu = GTK_MENU (widget);
2051
  menu = GTK_MENU (widget);
2052
  private = gtk_menu_get_private (menu);
1627
2053
1628
  menu_grab_transfer_window_destroy (menu);
2054
  menu_grab_transfer_window_destroy (menu);
1629
2055
Lines 1635-1640 Link Here
1635
  gdk_window_destroy (menu->bin_window);
2061
  gdk_window_destroy (menu->bin_window);
1636
  menu->bin_window = NULL;
2062
  menu->bin_window = NULL;
1637
2063
2064
  /* Shadows */
2065
  gdk_window_set_user_data (private->east_shadow, NULL);
2066
  gdk_window_destroy (private->east_shadow);
2067
  private->east_shadow = NULL;
2068
2069
  gdk_window_set_user_data (private->south_shadow, NULL);
2070
  gdk_window_destroy (private->south_shadow);
2071
  private->south_shadow = NULL;
2072
  
1638
  (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
2073
  (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
1639
}
2074
}
1640
2075
Lines 1753-1760 Link Here
1753
			      y,
2188
			      y,
1754
			      width,
2189
			      width,
1755
			      height);
2190
			      height);
1756
    }
1757
2191
2192
      if (GTK_WIDGET_MAPPED (widget))
2193
	{
2194
	  /* Remap the shadows as the menu size has changed */
2195
	  shadow_remove_timeout(widget);
2196
	  shadow_add_timeout(widget);
2197
	}
2198
    }
2199
    
1758
  if (menu_shell->children)
2200
  if (menu_shell->children)
1759
    {
2201
    {
1760
      child_allocation.x = 0;
2202
      child_allocation.x = 0;
Lines 1908-1914 Link Here
1908
			   MENU_SCROLL_ARROW_HEIGHT - 2 * border_y - 2,
2350
			   MENU_SCROLL_ARROW_HEIGHT - 2 * border_y - 2,
1909
			   MENU_SCROLL_ARROW_HEIGHT - 2 * border_y - 2);
2351
			   MENU_SCROLL_ARROW_HEIGHT - 2 * border_y - 2);
1910
	}
2352
	}
1911
    }
2353
      } 
2354
    else 
2355
      {
2356
	GtkMenuPrivate *private = gtk_menu_get_private (menu);
2357
2358
	if (event->window == private->east_shadow)
2359
	  shadow_paint(widget, &event->area, EAST_SIDE);
2360
	else if (event->window == private->south_shadow) 
2361
	  shadow_paint(widget, &event->area, SOUTH_SIDE);
2362
      }
1912
}
2363
}
1913
2364
1914
static gboolean
2365
static gboolean

Return to bug 30941