1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| #include <stdio.h>
#include <assert.h>
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <gdk/gdkkeysyms.h>
/* even if you don't use the user_data argument, it should still be there */
gboolean Show_photo(GtkWidget *widget, GdkEventButton *event, gpointer user_data)
{
if (event->type == GDK_BUTTON_PRESS && event->button == 3)
{
/* event is already a GdkEventButton, so this is not necessary */
//GdkEventButton *bevent = (GdkEventButton *) event;
gtk_menu_popup (GTK_MENU(widget), NULL, NULL, NULL, NULL,
event->button, event->time);
return TRUE;
}
return FALSE;
}
int
main(int argc, char* argv[])
{
GtkWidget* top_level_window;
GtkWidget *eb;
GtkWidget* file_menu;
GtkWidget* open_item;
GtkWidget* save_item;
GtkWidget* quit_item;
gtk_init(&argc, &argv);
top_level_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
/* connect this so that we can quit */
g_signal_connect(G_OBJECT(top_level_window), "delete-event", G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_set_size_request (top_level_window, 800,650);
file_menu = gtk_menu_new (); /* Don't need to show menus */
/* Create the menu items */
open_item = gtk_menu_item_new_with_label ("Open");
save_item = gtk_menu_item_new_with_label ("Save");
quit_item = gtk_menu_item_new_with_label ("Quit");
/* Add them to the menu */
gtk_menu_append (GTK_MENU (file_menu), open_item);
gtk_menu_append (GTK_MENU (file_menu), save_item);
gtk_menu_append (GTK_MENU (file_menu), quit_item);
gtk_widget_show (open_item);
gtk_widget_show (save_item);
gtk_widget_show (quit_item);
/* create a GtkEventBox to catch the signal */
eb = gtk_event_box_new();
gtk_container_add(GTK_CONTAINER(top_level_window), eb);
gtk_widget_show(eb);
g_signal_connect_swapped ( G_OBJECT(eb),
"button-press-event",
G_CALLBACK (Show_photo),
G_OBJECT(file_menu));
gtk_widget_show_all (top_level_window);
gtk_main ();
return 0;
} |