talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit 10c21676f0214b86dc51714d524c9e1cfbded9fb
parent b8ae498a690b3b2acd44a100e7fff745e0738b58
Author: Andrej Kacian <ticho@claws-mail.org>
Date:   Sat,  1 Dec 2018 10:38:29 +0100

Added header popup menu to folderview.

Diffstat:
Msrc/folderview.c | 58++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/folderview.h | 1+
2 files changed, 59 insertions(+), 0 deletions(-)

diff --git a/src/folderview.c b/src/folderview.c @@ -235,6 +235,11 @@ static gboolean folderview_update_item_claws (gpointer source, static void folderview_processing_cb(GtkAction *action, gpointer data); static void folderview_set_sens_and_popup_menu(FolderView *folderview, gint row, GdkEventButton *event); +static void folderview_header_set_displayed_columns_cb(GtkAction *gaction, + gpointer data); +static gboolean folderview_header_button_pressed(GtkWidget *widget, + GdkEvent *_event, + gpointer user_data); GHashTable *folderview_popups; @@ -255,6 +260,12 @@ static GtkActionEntry folderview_common_popup_entries[] = }; +static GtkActionEntry folderview_header_popup_entries[] = +{ + {"FolderViewHeaderPopup", NULL, "FolderViewHeaderPopup", NULL, NULL, NULL }, + {"FolderViewHeaderPopup/SetDisplayedColumns", NULL, N_("Set Displayed columns"), NULL, NULL, G_CALLBACK(folderview_header_set_displayed_columns_cb) } +}; + GtkTargetEntry folderview_drag_types[] = { {"claws-mail/internal", GTK_TARGET_SAME_APP, TARGET_DUMMY}, @@ -475,6 +486,11 @@ static GtkWidget *folderview_ctree_create(FolderView *folderview) prefs_common.folder_col_size[i]); gtk_cmclist_set_column_visibility (GTK_CMCLIST(ctree), i, col_state[i].visible); + + g_signal_connect(G_OBJECT(GTK_CMCLIST(ctree)->column[i].button), + "button-press-event", + G_CALLBACK(folderview_header_button_pressed), + folderview); } g_signal_connect(G_OBJECT(ctree), "key_press_event", @@ -607,6 +623,18 @@ FolderView *folderview_create(MainWindow *mainwin) folderview->popups = g_hash_table_new(g_str_hash, g_str_equal); g_hash_table_foreach(folderview_popups, create_action_groups, folderview); + gtk_action_group_add_actions(mainwin->action_group, + folderview_header_popup_entries, + G_N_ELEMENTS(folderview_header_popup_entries), + (gpointer)folderview); + + MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus", "FolderViewHeaderPopup", "FolderViewHeaderPopup", GTK_UI_MANAGER_MENU) + MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus/FolderViewHeaderPopup", "SetDisplayedColumns", "FolderViewHeaderPopup/SetDisplayedColumns", GTK_UI_MANAGER_MENUITEM) + + folderview->headerpopupmenu = gtk_menu_item_get_submenu(GTK_MENU_ITEM( + gtk_ui_manager_get_widget(mainwin->ui_manager, + "/Menus/FolderViewHeaderPopup") )); + folderview->ctree = ctree; folderview->folder_update_callback_id = @@ -3320,3 +3348,33 @@ void folderview_grab_focus(FolderView *folderview) if (folderview) gtk_widget_grab_focus(folderview->ctree); } + +static void folderview_header_set_displayed_columns_cb(GtkAction *gaction, + gpointer data) +{ + prefs_folder_column_open(); +} + +static gboolean folderview_header_button_pressed(GtkWidget *widget, + GdkEvent *_event, + gpointer user_data) +{ + GdkEventButton *event = (GdkEventButton *)_event; + FolderView *folderview = (FolderView *)user_data; + + cm_return_val_if_fail(folderview != NULL, FALSE); + + /* Only handle single button presses. */ + if (event->type == GDK_2BUTTON_PRESS || + event->type == GDK_3BUTTON_PRESS) + return FALSE; + + /* Handle right-click for context menu */ + if (event->button == 3) { + gtk_menu_popup(GTK_MENU(folderview->headerpopupmenu), + NULL, NULL, NULL, NULL, 3, event->time); + return TRUE; + } + + return FALSE; +} diff --git a/src/folderview.h b/src/folderview.h @@ -51,6 +51,7 @@ struct _FolderView { GtkWidget *scrolledwin; GtkWidget *ctree; + GtkWidget *headerpopupmenu; GHashTable *popups;