401
void cairo_dock_popup_menu_on_container (GtkWidget *menu, CairoContainer *pContainer)
403
static void _place_menu_on_icon (GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer *data)
406
Icon *pIcon = data[0];
407
CairoContainer *pContainer = data[1];
408
int x0 = pContainer->iWindowPositionX + pIcon->fDrawX;
409
int y0 = pContainer->iWindowPositionY + pIcon->fDrawY;
411
int w, h; // taille menu
412
GtkRequisition requisition;
413
gtk_widget_size_request (GTK_WIDGET (menu), &requisition);
414
w = requisition.width;
415
h = requisition.height;
417
//g_print ("%d;%d %dx%d\n", x0, y0, w, h);
418
if (pContainer->bIsHorizontal)
421
if (pContainer->bDirectionUp)
422
*y = y0 - h; /// - h_menu ?...
424
*y = y0 + pIcon->fHeight * pIcon->fScale;
429
if (pContainer->bDirectionUp)
430
*x = y0 - w; /// - w_menu ?...
432
*x = y0 + pIcon->fHeight * pIcon->fScale;
435
void cairo_dock_popup_menu_on_icon (GtkWidget *menu, Icon *pIcon, CairoContainer *pContainer)
437
static gpointer *data = NULL; // 1 seul menu a la fois, donc on peut la faire statique.
403
439
if (menu == NULL)
441
GtkMenuPositionFunc place_menu = NULL;
442
if (pIcon != NULL && pContainer != NULL)
444
place_menu = (GtkMenuPositionFunc)_place_menu_on_icon;
446
data = g_new0 (gpointer, 2);
448
data[1] = pContainer;
405
451
if (CAIRO_DOCK_IS_DOCK (pContainer))
407
453
if (g_signal_handler_find (menu,
412
458
_cairo_dock_delete_menu,
413
pContainer) == 0) // on evite de connecter 2 fois ce signal, donc la fonction est appelable plusieurs fois.
459
pContainer) == 0) // on evite de connecter 2 fois ce signal, donc la fonction est appelable plusieurs fois sur un meme menu.
415
461
g_signal_connect (G_OBJECT (menu),
506
static GtkWidget *s_pMenu = NULL;
507
static gboolean _on_delete_menu (GtkWidget *widget, GdkEvent *event, gpointer user_data)
509
g_print ("*** menu deleted\n");
460
513
GtkWidget *cairo_dock_build_menu (Icon *icon, CairoContainer *pContainer)
462
static GtkWidget *s_pMenu = NULL;
463
515
if (s_pMenu != NULL)
465
517
gtk_widget_destroy (GTK_WIDGET (s_pMenu));
482
534
cairo_dock_notify (CAIRO_DOCK_BUILD_ICON_MENU, icon, pContainer, menu);
535
g_signal_connect (G_OBJECT (menu), "delete-event", G_CALLBACK (_on_delete_menu), NULL); // apparemment inutile.