static gboolean view_button_press (GtkWidget *widget, GdkEventButton *event) { if (event->button == 3 && event->type == GDK_BUTTON_PRESS) return view_popup_menu (widget, event); return FALSE; }
static gboolean view_button_press (GtkWidget *widget, GdkEventButton *event) { if (gdk_event_triggers_context_menu ((GdkEvent *) event)) return view_popup_menu (widget, event); return FALSE; }
/** \brief Manage "popup-menu" events. * \param treeview The tree view in the GtkSatList widget * \param list Pointer to the GtkSatList widget. * * This function is called when the "popup-menu" signal is emitted. This * usually happens if the user presses SHJIFT-F10? It is used as a wrapper * for the function that actually creates the popup menu. */ static gboolean popup_menu_cb (GtkWidget *treeview, gpointer data) { /* if there is no selection, select the first row */ view_popup_menu (treeview, NULL, data); return TRUE; /* we handled this */ }
/* *----------------------------------------------------------------------------- * view window main routines *----------------------------------------------------------------------------- */ static void button_cb(ImageWindow *imd, GdkEventButton *event, gpointer data) { ViewWindow *vw = data; GtkWidget *menu; switch (event->button) { case MOUSE_BUTTON_LEFT: view_step_next(vw); break; case MOUSE_BUTTON_MIDDLE: view_step_prev(vw); break; case MOUSE_BUTTON_RIGHT: menu = view_popup_menu(vw); gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time); break; default: break; } }
gboolean view_onButtonPressed(GtkWidget *treeview, GdkEventButton *event, gpointer userdata) { /* single click with the right mouse button? */ if (event->type == GDK_BUTTON_PRESS && event->button == 3) { g_print ("Single right click on the tree view.\n"); /* optional: select row if no row is selected or only * one other row is selected (will only do something * if you set a tree selection mode as described later * in the tutorial) */ if (1) { GtkTreeSelection *selection; selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)); /* Note: gtk_tree_selection_count_selected_rows() does not * exist in gtk+-2.0, only in gtk+ >= v2.2 ! */ if (gtk_tree_selection_count_selected_rows(selection) <= 1) { GtkTreePath *path; /* Get tree path for row that was clicked */ if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(treeview), (gint) event->x, (gint) event->y, &path, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all(selection); gtk_tree_selection_select_path(selection, path); gtk_tree_path_free(path); } } } /* end of optional bit */ view_popup_menu(treeview, event, userdata); return TRUE; /* we handled this */ } return FALSE; /* we did not handle this */ }
/* This used to get the column as an argument binded when the signal was * created, but it seems GTK now destroys and recreates them in some * circumstances. So bind the column description instead and search for the * column by its title. */ static gboolean col_onButtonPressed(GtkButton * button, GdkEventButton * event, trg_column_description *desc) { if (event->type == GDK_BUTTON_PRESS && event->button == 3) { GtkTreeView *gtv = GTK_TREE_VIEW(gtk_widget_get_parent(GTK_WIDGET(button))); GList *cols = gtk_tree_view_get_columns(gtv); GList *li; for (li = cols; li; li = g_list_next(li)) { GtkTreeViewColumn *col = GTK_TREE_VIEW_COLUMN(li->data); if (!g_strcmp0(desc->header, gtk_tree_view_column_get_title(col))) { view_popup_menu(button, event, col); break; } } g_list_free(cols); return TRUE; } return FALSE; }
/* Handle click on treeview */ static gboolean view_click_event(GtkWidget *view, GdkEventButton *event, gpointer user_data){ if(event->button!=3) return FALSE;//let system handle left click GtkTreePath *path=NULL; GtkTreeViewColumn *column=NULL; GtkTreeSelection *selection=gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); if(gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view), (gint)event->x, (gint)event->y, &path, &column, NULL, NULL)){ /*clicks within treeview.*/ if(!gtk_tree_selection_path_is_selected(selection, path)){ /*the path clicked is not selected. move selection to this path*/ gtk_tree_selection_unselect_all(selection); gtk_tree_selection_select_path(selection, path); } gtk_tree_path_free(path); }else{//clicks outsize of treeview. unselect all. gtk_tree_selection_unselect_all(selection); path=NULL; column=NULL; } //right click popup menu view_popup_menu(view, user_data); return TRUE; }
static gboolean view_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer data) { ViewWindow *vw = data; ImageWindow *imd; gint stop_signal; GtkWidget *menu; gint x = 0; gint y = 0; imd = view_window_active_image(vw); stop_signal = TRUE; switch (event->keyval) { case GDK_KEY_Left: case GDK_KEY_KP_Left: x -= 1; break; case GDK_KEY_Right: case GDK_KEY_KP_Right: x += 1; break; case GDK_KEY_Up: case GDK_KEY_KP_Up: y -= 1; break; case GDK_KEY_Down: case GDK_KEY_KP_Down: y += 1; break; default: stop_signal = FALSE; break; } if (x != 0 || y!= 0) { if (event->state & GDK_SHIFT_MASK) { x *= 3; y *= 3; } keyboard_scroll_calc(&x, &y, event); image_scroll(imd, x, y); } if (stop_signal) return stop_signal; if (event->state & GDK_CONTROL_MASK) { stop_signal = TRUE; switch (event->keyval) { case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': break; case 'C': case 'c': file_util_copy(image_get_fd(imd), NULL, NULL, imd->widget); break; case 'M': case 'm': file_util_move(image_get_fd(imd), NULL, NULL, imd->widget); break; case 'R': case 'r': file_util_rename(image_get_fd(imd), NULL, imd->widget); break; case 'D': case 'd': file_util_delete(image_get_fd(imd), NULL, imd->widget); break; case 'W': case 'w': view_window_close(vw); break; default: stop_signal = FALSE; break; } } else if (event->state & GDK_SHIFT_MASK) { stop_signal = TRUE; switch (event->keyval) { case 'R': case 'r': image_alter_orientation(imd, ALTER_ROTATE_180); break; case 'M': case 'm': image_alter_orientation(imd, ALTER_MIRROR); break; case 'F': case 'f': image_alter_orientation(imd, ALTER_FLIP); break; case 'G': case 'g': image_set_desaturate(imd, !image_get_desaturate(imd)); break; case 'P': case 'p': { FileData *fd; view_fullscreen_toggle(vw, TRUE); imd = view_window_active_image(vw); fd = image_get_fd(imd); print_window_new(fd, fd ? g_list_append(NULL, file_data_ref(fd)) : NULL, filelist_copy(vw->list), vw->window); } break; default: stop_signal = FALSE; break; } } else { stop_signal = TRUE; switch (event->keyval) { case GDK_KEY_Page_Up: case GDK_KEY_KP_Page_Up: case GDK_KEY_BackSpace: case 'B': case 'b': view_step_prev(vw); break; case GDK_KEY_Page_Down: case GDK_KEY_KP_Page_Down: case GDK_KEY_space: case 'N': case 'n': view_step_next(vw); break; case GDK_KEY_Home: case GDK_KEY_KP_Home: view_step_to_end(vw, FALSE); break; case GDK_KEY_End: case GDK_KEY_KP_End: view_step_to_end(vw, TRUE); break; case '+': case '=': case GDK_KEY_KP_Add: image_zoom_adjust(imd, get_zoom_increment()); break; case '-': case GDK_KEY_KP_Subtract: image_zoom_adjust(imd, -get_zoom_increment()); break; case 'X': case 'x': case GDK_KEY_KP_Multiply: image_zoom_set(imd, 0.0); break; case 'Z': case 'z': case GDK_KEY_KP_Divide: case '1': image_zoom_set(imd, 1.0); break; case '2': image_zoom_set(imd, 2.0); break; case '3': image_zoom_set(imd, 3.0); break; case '4': image_zoom_set(imd, 4.0); break; case '7': image_zoom_set(imd, -4.0); break; case '8': image_zoom_set(imd, -3.0); break; case '9': image_zoom_set(imd, -2.0); break; case 'W': case 'w': image_zoom_set_fill_geometry(imd, FALSE); break; case 'H': case 'h': image_zoom_set_fill_geometry(imd, TRUE); break; case 'R': case 'r': image_reload(imd); break; case 'S': case 's': if (vw->ss) { view_slideshow_stop(vw); } else { view_slideshow_start(vw); } break; case 'P': case 'p': slideshow_pause_toggle(vw->ss); break; case 'F': case 'f': case 'V': case 'v': case GDK_KEY_F11: view_fullscreen_toggle(vw, FALSE); break; case 'I': case 'i': view_overlay_toggle(vw); break; case ']': image_alter_orientation(imd, ALTER_ROTATE_90); break; case '[': image_alter_orientation(imd, ALTER_ROTATE_90_CC); break; case GDK_KEY_Delete: case GDK_KEY_KP_Delete: if (options->file_ops.enable_delete_key) { file_util_delete(image_get_fd(imd), NULL, imd->widget); } break; case GDK_KEY_Escape: if (vw->fs) { view_fullscreen_toggle(vw, TRUE); } else { view_window_close(vw); } break; case GDK_KEY_Menu: case GDK_KEY_F10: menu = view_popup_menu(vw); gtk_menu_popup(GTK_MENU(menu), NULL, NULL, view_window_menu_pos_cb, vw, 0, GDK_CURRENT_TIME); break; default: stop_signal = FALSE; break; } } return stop_signal; }
gboolean view_onPopupMenu(GtkWidget *treeview, gpointer userdata) { view_popup_menu(treeview, NULL, userdata); return TRUE; /* we handled this */ }