Use gtk_menu_attach_to_widget()
parent
d95671b8f2
commit
89db53d70e
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* moolinklabel.c
|
||||
*
|
||||
* Copyright (C) 2004-2006 by Yevgen Muntyan <muntyan@math.tamu.edu>
|
||||
* Copyright (C) 2004-2007 by Yevgen Muntyan <muntyan@math.tamu.edu>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -200,8 +200,7 @@ moo_link_label_button_press (GtkWidget *widget,
|
|||
return FALSE;
|
||||
|
||||
menu = gtk_menu_new ();
|
||||
MOO_OBJECT_REF_SINK (menu);
|
||||
g_object_set_data_full (G_OBJECT (widget), "moo-menu", menu, g_object_unref);
|
||||
gtk_menu_attach_to_widget (GTK_MENU (menu), widget, NULL);
|
||||
|
||||
item = gtk_image_menu_item_new_with_label ("Copy Link");
|
||||
image = gtk_image_new_from_stock (GTK_STOCK_COPY, GTK_ICON_SIZE_MENU);
|
||||
|
|
|
@ -1065,20 +1065,6 @@ doc_move (MooFileSelector *filesel,
|
|||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
really_destroy_menu (GtkWidget *menu)
|
||||
{
|
||||
g_object_unref (menu);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
destroy_menu (GtkWidget *menu)
|
||||
{
|
||||
g_idle_add ((GSourceFunc) really_destroy_menu, menu);
|
||||
}
|
||||
|
||||
|
||||
typedef enum {
|
||||
DROP_DOC_ASK = 1,
|
||||
DROP_DOC_SAVE_AS,
|
||||
|
@ -1213,8 +1199,7 @@ create_drop_doc_menu (MooFileSelector *filesel,
|
|||
GSList *items = NULL;
|
||||
|
||||
menu = gtk_menu_new ();
|
||||
MOO_OBJECT_REF_SINK (menu);
|
||||
g_signal_connect (menu, "deactivate", G_CALLBACK (destroy_menu), NULL);
|
||||
gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (filesel), NULL);
|
||||
g_signal_connect (menu, "key-press-event", G_CALLBACK (menu_key_event), NULL);
|
||||
g_signal_connect (menu, "key-release-event", G_CALLBACK (menu_key_event), NULL);
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* moofileview.c
|
||||
*
|
||||
* Copyright (C) 2004-2006 by Yevgen Muntyan <muntyan@math.tamu.edu>
|
||||
* Copyright (C) 2004-2007 by Yevgen Muntyan <muntyan@math.tamu.edu>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -3157,19 +3157,6 @@ file_view_properties_dialog (MooFileView *fileview)
|
|||
/* Popup menu
|
||||
*/
|
||||
|
||||
static gboolean
|
||||
really_destroy_menu (GtkWidget *menu)
|
||||
{
|
||||
g_object_unref (menu);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
destroy_menu (GtkWidget *menu)
|
||||
{
|
||||
g_idle_add ((GSourceFunc) really_destroy_menu, menu);
|
||||
}
|
||||
|
||||
/* TODO */
|
||||
static void
|
||||
menu_position_func (G_GNUC_UNUSED GtkMenu *menu,
|
||||
|
@ -3218,8 +3205,7 @@ do_popup (MooFileView *fileview,
|
|||
MOO_UI_MENU, "MooFileView/Menu",
|
||||
fileview->priv->actions,
|
||||
NULL);
|
||||
gtk_object_sink (g_object_ref (menu));
|
||||
g_signal_connect (menu, "deactivate", G_CALLBACK (destroy_menu), NULL);
|
||||
gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (fileview), NULL);
|
||||
|
||||
_moo_file_view_tools_check (fileview);
|
||||
g_signal_emit (fileview, signals[POPULATE_POPUP], 0, files, menu);
|
||||
|
@ -5681,8 +5667,7 @@ moo_file_view_drop_uris (MooFileView *fileview,
|
|||
char *dir_copy = g_strdup (destdir);
|
||||
|
||||
menu = gtk_menu_new ();
|
||||
gtk_object_sink (g_object_ref (menu));
|
||||
g_signal_connect (menu, "deactivate", G_CALLBACK (destroy_menu), NULL);
|
||||
gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (fileview), NULL);
|
||||
g_object_set_data_full (G_OBJECT (menu), "moo-file-view-drop-files",
|
||||
filenames, (GDestroyNotify) free_string_list);
|
||||
g_object_set_data_full (G_OBJECT (menu), "moo-file-view-drop-dir",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* mooterm-private.h
|
||||
*
|
||||
* Copyright (C) 2004-2006 by Yevgen Muntyan <muntyan@math.tamu.edu>
|
||||
* Copyright (C) 2004-2007 by Yevgen Muntyan <muntyan@math.tamu.edu>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -161,8 +161,6 @@ struct _MooTermPrivate {
|
|||
gulong track_release_id;
|
||||
gulong track_scroll_id;
|
||||
|
||||
GtkWidget *menu;
|
||||
|
||||
GtkIMContext *im;
|
||||
gboolean im_preedit_active;
|
||||
GdkModifierType modifiers;
|
||||
|
|
|
@ -579,10 +579,6 @@ moo_term_unrealize (GtkWidget *widget)
|
|||
g_source_remove (term->priv->update_timer);
|
||||
term->priv->update_timer = 0;
|
||||
|
||||
if (term->priv->menu)
|
||||
g_object_unref (term->priv->menu);
|
||||
term->priv->menu = NULL;
|
||||
|
||||
for (i = 0; i < POINTERS_NUM; ++i)
|
||||
{
|
||||
if (term->priv->pointer[i])
|
||||
|
@ -1844,37 +1840,35 @@ void
|
|||
_moo_term_do_popup_menu (MooTerm *term,
|
||||
GdkEventButton *event)
|
||||
{
|
||||
GtkWidget *menu;
|
||||
GtkWidget *item;
|
||||
|
||||
g_return_if_fail (MOO_IS_TERM (term));
|
||||
|
||||
if (term->priv->menu)
|
||||
g_object_unref (term->priv->menu);
|
||||
|
||||
term->priv->menu = gtk_menu_new ();
|
||||
MOO_OBJECT_REF_SINK (term->priv->menu);
|
||||
menu = gtk_menu_new ();
|
||||
gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (term), NULL);
|
||||
|
||||
item = gtk_image_menu_item_new_from_stock (GTK_STOCK_COPY, NULL);
|
||||
gtk_widget_set_sensitive (item, moo_term_get_selection_bounds (term, NULL, NULL));
|
||||
gtk_widget_show (item);
|
||||
g_signal_connect_swapped (item, "activate",
|
||||
G_CALLBACK (menu_copy), term);
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (term->priv->menu), item);
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
|
||||
|
||||
item = gtk_image_menu_item_new_from_stock (GTK_STOCK_PASTE, NULL);
|
||||
gtk_widget_show (item);
|
||||
g_signal_connect_swapped (item, "activate",
|
||||
G_CALLBACK (menu_paste), term);
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (term->priv->menu), item);
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
|
||||
|
||||
g_signal_emit (term, signals[POPULATE_POPUP], 0, term->priv->menu);
|
||||
g_signal_emit (term, signals[POPULATE_POPUP], 0, menu);
|
||||
|
||||
if (event)
|
||||
gtk_menu_popup (GTK_MENU (term->priv->menu),
|
||||
gtk_menu_popup (GTK_MENU (menu),
|
||||
NULL, NULL, NULL, NULL,
|
||||
event->button, event->time);
|
||||
else
|
||||
gtk_menu_popup (GTK_MENU (term->priv->menu), NULL, NULL,
|
||||
gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
|
||||
(GtkMenuPositionFunc) menu_position_func,
|
||||
term, 0, gtk_get_current_event_time ());
|
||||
}
|
||||
|
|
|
@ -3120,13 +3120,13 @@ static gboolean moo_notebook_do_popup (MooNotebook *nb,
|
|||
menu = nb->priv->popup_func (nb, page->child, nb->priv->popup_user_data);
|
||||
g_return_val_if_fail (GTK_IS_MENU (menu), FALSE);
|
||||
|
||||
MOO_OBJECT_REF_SINK (menu);
|
||||
gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (nb), NULL);
|
||||
|
||||
g_signal_emit (nb, signals[POPULATE_POPUP], 0, page->child, menu, &dont);
|
||||
|
||||
if (dont)
|
||||
{
|
||||
g_object_unref (menu);
|
||||
gtk_menu_detach (GTK_MENU (menu));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -3138,8 +3138,6 @@ static gboolean moo_notebook_do_popup (MooNotebook *nb,
|
|||
popup_position_func, &data,
|
||||
event ? event->button : 0,
|
||||
event ? event->time : gtk_get_current_event_time ());
|
||||
|
||||
g_object_unref (menu);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue