This is an automated email from the git hooks/post-receive script. g o t t c o d e p u s h e d a c o m m i t t o b r a n c h m a s t e r in repository panel-plugins/xfce4-whiskermenu-plugin.
commit 7369ad8d1f6f55657f98f5f56df6cafc4aeda8bb Author: Graeme Gott <[email protected]> Date: Wed Dec 18 11:53:14 2019 -0500 Add interface for LauncherView. --- panel-plugin/CMakeLists.txt | 2 +- panel-plugin/favorites-page.cpp | 9 ++- panel-plugin/favorites-page.h | 3 +- .../{launcher-view.cpp => launcher-tree-view.cpp} | 85 ++++++++++++---------- .../{launcher-view.h => launcher-tree-view.h} | 30 ++------ panel-plugin/launcher-view.h | 64 +++++++--------- panel-plugin/page.cpp | 39 +++++----- panel-plugin/page.h | 14 +++- panel-plugin/search-page.cpp | 11 ++- panel-plugin/search-page.h | 3 +- 10 files changed, 137 insertions(+), 123 deletions(-) diff --git a/panel-plugin/CMakeLists.txt b/panel-plugin/CMakeLists.txt index d0825bd..cce0447 100644 --- a/panel-plugin/CMakeLists.txt +++ b/panel-plugin/CMakeLists.txt @@ -78,7 +78,7 @@ add_library(whiskermenu MODULE favorites-page.cpp icon-size.cpp launcher.cpp - launcher-view.cpp + launcher-tree-view.cpp page.cpp plugin.cpp profile-picture.cpp diff --git a/panel-plugin/favorites-page.cpp b/panel-plugin/favorites-page.cpp index 89d57b8..8512e24 100644 --- a/panel-plugin/favorites-page.cpp +++ b/panel-plugin/favorites-page.cpp @@ -35,7 +35,7 @@ using namespace WhiskerMenu; FavoritesPage::FavoritesPage(Window* window) : Page(window) { - set_reorderable(true); + view_created(); } //----------------------------------------------------------------------------- @@ -275,3 +275,10 @@ void FavoritesPage::sort_descending() } //----------------------------------------------------------------------------- + +void FavoritesPage::view_created() +{ + set_reorderable(true); +} + +//----------------------------------------------------------------------------- diff --git a/panel-plugin/favorites-page.h b/panel-plugin/favorites-page.h index e8be1f6..16f19b2 100644 --- a/panel-plugin/favorites-page.h +++ b/panel-plugin/favorites-page.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013 Graeme Gott <[email protected]> + * Copyright (C) 2013, 2019 Graeme Gott <[email protected]> * * This library is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -47,6 +47,7 @@ private: void sort(std::vector<Launcher*>& items) const; void sort_ascending(); void sort_descending(); + void view_created(); }; } diff --git a/panel-plugin/launcher-view.cpp b/panel-plugin/launcher-tree-view.cpp similarity index 76% rename from panel-plugin/launcher-view.cpp rename to panel-plugin/launcher-tree-view.cpp index 42a0bf1..347302f 100644 --- a/panel-plugin/launcher-view.cpp +++ b/panel-plugin/launcher-tree-view.cpp @@ -15,7 +15,7 @@ * along with this library. If not, see <http://www.gnu.org/licenses/>. */ -#include "launcher-view.h" +#include "launcher-tree-view.h" #include "category.h" #include "settings.h" @@ -37,8 +37,7 @@ static gboolean is_separator(GtkTreeModel* model, GtkTreeIter* iter, gpointer) //----------------------------------------------------------------------------- -LauncherView::LauncherView() : - m_model(NULL), +LauncherTreeView::LauncherTreeView() : m_icon_size(0), m_row_activated(false) { @@ -51,8 +50,8 @@ LauncherView::LauncherView() : gtk_tree_view_set_fixed_height_mode(m_view, true); gtk_tree_view_set_row_separator_func(m_view, &is_separator, NULL, NULL); create_column(); - g_signal_connect_slot(m_view, "key-press-event", &LauncherView::on_key_press_event, this); - g_signal_connect_slot(m_view, "key-release-event", &LauncherView::on_key_release_event, this); + g_signal_connect_slot(m_view, "key-press-event", &LauncherTreeView::on_key_press_event, this); + g_signal_connect_slot(m_view, "key-release-event", &LauncherTreeView::on_key_release_event, this); // Use single clicks to activate items exo_tree_view_set_single_click(EXO_TREE_VIEW(m_view), true); @@ -64,25 +63,23 @@ LauncherView::LauncherView() : g_object_ref_sink(m_view); // Handle drag-and-drop - g_signal_connect_slot(m_view, "button-press-event", &LauncherView::on_button_press_event, this); - g_signal_connect_slot(m_view, "row-activated", &LauncherView::on_row_activated, this); - g_signal_connect_slot<GtkTreeView*,GtkTreeIter*,GtkTreePath*>(m_view, "test-collapse-row", &LauncherView::test_row_toggle, this); - g_signal_connect_slot<GtkTreeView*,GtkTreeIter*,GtkTreePath*>(m_view, "test-expand-row", &LauncherView::test_row_toggle, this); + g_signal_connect_slot(m_view, "button-press-event", &LauncherTreeView::on_button_press_event, this); + g_signal_connect_slot(m_view, "row-activated", &LauncherTreeView::on_row_activated, this); + g_signal_connect_slot<GtkTreeView*,GtkTreeIter*,GtkTreePath*>(m_view, "test-collapse-row", &LauncherTreeView::test_row_toggle, this); + g_signal_connect_slot<GtkTreeView*,GtkTreeIter*,GtkTreePath*>(m_view, "test-expand-row", &LauncherTreeView::test_row_toggle, this); } //----------------------------------------------------------------------------- -LauncherView::~LauncherView() +LauncherTreeView::~LauncherTreeView() { - m_model = NULL; - gtk_widget_destroy(GTK_WIDGET(m_view)); g_object_unref(m_view); } //----------------------------------------------------------------------------- -GtkTreePath* LauncherView::get_cursor() const +GtkTreePath* LauncherTreeView::get_cursor() const { GtkTreePath* path = NULL; gtk_tree_view_get_cursor(m_view, &path, NULL); @@ -91,7 +88,7 @@ GtkTreePath* LauncherView::get_cursor() const //----------------------------------------------------------------------------- -GtkTreePath* LauncherView::get_path_at_pos(int x, int y) const +GtkTreePath* LauncherTreeView::get_path_at_pos(int x, int y) const { GtkTreePath* path = NULL; gtk_tree_view_get_path_at_pos(m_view, x, y, &path, NULL, NULL, NULL); @@ -100,7 +97,7 @@ GtkTreePath* LauncherView::get_path_at_pos(int x, int y) const //----------------------------------------------------------------------------- -GtkTreePath* LauncherView::get_selected_path() const +GtkTreePath* LauncherTreeView::get_selected_path() const { GtkTreePath* path = NULL; GtkTreeSelection* selection = gtk_tree_view_get_selection(m_view); @@ -114,7 +111,7 @@ GtkTreePath* LauncherView::get_selected_path() const //----------------------------------------------------------------------------- -void LauncherView::activate_path(GtkTreePath* path) +void LauncherTreeView::activate_path(GtkTreePath* path) { GtkTreeViewColumn* column = gtk_tree_view_get_column(m_view, 0); gtk_tree_view_row_activated(m_view, path, column); @@ -122,14 +119,14 @@ void LauncherView::activate_path(GtkTreePath* path) //----------------------------------------------------------------------------- -void LauncherView::scroll_to_path(GtkTreePath* path) +void LauncherTreeView::scroll_to_path(GtkTreePath* path) { gtk_tree_view_scroll_to_cell(m_view, path, NULL, true, 0.5f, 0.5f); } //----------------------------------------------------------------------------- -void LauncherView::select_path(GtkTreePath* path) +void LauncherTreeView::select_path(GtkTreePath* path) { GtkTreeSelection* selection = gtk_tree_view_get_selection(m_view); gtk_tree_selection_select_path(selection, path); @@ -137,7 +134,7 @@ void LauncherView::select_path(GtkTreePath* path) //----------------------------------------------------------------------------- -void LauncherView::set_cursor(GtkTreePath* path) +void LauncherTreeView::set_cursor(GtkTreePath* path) { GtkTreeSelection* selection = gtk_tree_view_get_selection(m_view); GtkSelectionMode mode = gtk_tree_selection_get_mode(selection); @@ -148,14 +145,14 @@ void LauncherView::set_cursor(GtkTreePath* path) //----------------------------------------------------------------------------- -void LauncherView::set_fixed_height_mode(bool fixed_height) +void LauncherTreeView::set_fixed_height_mode(bool fixed_height) { gtk_tree_view_set_fixed_height_mode(m_view, fixed_height); } //----------------------------------------------------------------------------- -void LauncherView::set_selection_mode(GtkSelectionMode mode) +void LauncherTreeView::set_selection_mode(GtkSelectionMode mode) { GtkTreeSelection* selection = gtk_tree_view_get_selection(m_view); gtk_tree_selection_set_mode(selection, mode); @@ -163,28 +160,36 @@ void LauncherView::set_selection_mode(GtkSelectionMode mode) //----------------------------------------------------------------------------- -void LauncherView::hide_tooltips() +void LauncherTreeView::hide_tooltips() { gtk_tree_view_set_tooltip_column(m_view, -1); } //----------------------------------------------------------------------------- -void LauncherView::show_tooltips() +void LauncherTreeView::show_tooltips() +{ + gtk_tree_view_set_tooltip_column(m_view, COLUMN_TOOLTIP); +} + +//----------------------------------------------------------------------------- + +void LauncherTreeView::clear_selection() { - gtk_tree_view_set_tooltip_column(m_view, LauncherView::COLUMN_TOOLTIP); + GtkTreeSelection* selection = gtk_tree_view_get_selection(m_view); + gtk_tree_selection_unselect_all(selection); } //----------------------------------------------------------------------------- -void LauncherView::collapse_all() +void LauncherTreeView::collapse_all() { gtk_tree_view_collapse_all(m_view); } //----------------------------------------------------------------------------- -void LauncherView::set_model(GtkTreeModel* model) +void LauncherTreeView::set_model(GtkTreeModel* model) { m_model = model; gtk_tree_view_set_model(m_view, model); @@ -192,7 +197,7 @@ void LauncherView::set_model(GtkTreeModel* model) //----------------------------------------------------------------------------- -void LauncherView::unset_model() +void LauncherTreeView::unset_model() { m_model = NULL; gtk_tree_view_set_model(m_view, NULL); @@ -200,35 +205,35 @@ void LauncherView::unset_model() //----------------------------------------------------------------------------- -void LauncherView::set_drag_source(GdkModifierType start_button_mask, const GtkTargetEntry* targets, gint n_targets, GdkDragAction actions) +void LauncherTreeView::set_drag_source(GdkModifierType start_button_mask, const GtkTargetEntry* targets, gint n_targets, GdkDragAction actions) { gtk_tree_view_enable_model_drag_source(m_view, start_button_mask, targets, n_targets, actions); } //----------------------------------------------------------------------------- -void LauncherView::set_drag_dest(const GtkTargetEntry* targets, gint n_targets, GdkDragAction actions) +void LauncherTreeView::set_drag_dest(const GtkTargetEntry* targets, gint n_targets, GdkDragAction actions) { gtk_tree_view_enable_model_drag_dest(m_view, targets, n_targets, actions); } //----------------------------------------------------------------------------- -void LauncherView::unset_drag_source() +void LauncherTreeView::unset_drag_source() { gtk_tree_view_unset_rows_drag_source(m_view); } //----------------------------------------------------------------------------- -void LauncherView::unset_drag_dest() +void LauncherTreeView::unset_drag_dest() { gtk_tree_view_unset_rows_drag_dest(m_view); } //----------------------------------------------------------------------------- -void LauncherView::reload_icon_size() +void LauncherTreeView::reload_icon_size() { // Force exo to reload SVG icons if (m_icon_size != wm_settings->launcher_icon_size.get_size()) @@ -240,7 +245,7 @@ void LauncherView::reload_icon_size() //----------------------------------------------------------------------------- -void LauncherView::create_column() +void LauncherTreeView::create_column() { m_icon_size = wm_settings->launcher_icon_size.get_size(); @@ -254,13 +259,13 @@ void LauncherView::create_column() g_object_set(icon_renderer, "follow-state", false, NULL); g_object_set(icon_renderer, "size", m_icon_size, NULL); gtk_tree_view_column_pack_start(m_column, icon_renderer, false); - gtk_tree_view_column_add_attribute(m_column, icon_renderer, "icon", LauncherView::COLUMN_ICON); + gtk_tree_view_column_add_attribute(m_column, icon_renderer, "icon", COLUMN_ICON); } GtkCellRenderer* text_renderer = gtk_cell_renderer_text_new(); g_object_set(text_renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL); gtk_tree_view_column_pack_start(m_column, text_renderer, true); - gtk_tree_view_column_add_attribute(m_column, text_renderer, "markup", LauncherView::COLUMN_TEXT); + gtk_tree_view_column_add_attribute(m_column, text_renderer, "markup", COLUMN_TEXT); gtk_tree_view_column_set_sizing(m_column, GTK_TREE_VIEW_COLUMN_FIXED); @@ -269,7 +274,7 @@ void LauncherView::create_column() //----------------------------------------------------------------------------- -gboolean LauncherView::on_key_press_event(GtkWidget*, GdkEvent* event) +gboolean LauncherTreeView::on_key_press_event(GtkWidget*, GdkEvent* event) { GdkEventKey* key_event = reinterpret_cast<GdkEventKey*>(event); if ((key_event->keyval == GDK_KEY_Up) || (key_event->keyval == GDK_KEY_Down)) @@ -281,7 +286,7 @@ gboolean LauncherView::on_key_press_event(GtkWidget*, GdkEvent* event) //----------------------------------------------------------------------------- -gboolean LauncherView::on_key_release_event(GtkWidget*, GdkEvent* event) +gboolean LauncherTreeView::on_key_release_event(GtkWidget*, GdkEvent* event) { GdkEventKey* key_event = reinterpret_cast<GdkEventKey*>(event); if ((key_event->keyval == GDK_KEY_Up) || (key_event->keyval == GDK_KEY_Down)) @@ -293,7 +298,7 @@ gboolean LauncherView::on_key_release_event(GtkWidget*, GdkEvent* event) //----------------------------------------------------------------------------- -gboolean LauncherView::on_button_press_event(GtkWidget*, GdkEvent*) +gboolean LauncherTreeView::on_button_press_event(GtkWidget*, GdkEvent*) { m_row_activated = false; @@ -302,7 +307,7 @@ gboolean LauncherView::on_button_press_event(GtkWidget*, GdkEvent*) //----------------------------------------------------------------------------- -void LauncherView::on_row_activated(GtkTreeView* tree_view, GtkTreePath* path, GtkTreeViewColumn*) +void LauncherTreeView::on_row_activated(GtkTreeView* tree_view, GtkTreePath* path, GtkTreeViewColumn*) { Element* element = NULL; GtkTreeIter iter; @@ -327,7 +332,7 @@ void LauncherView::on_row_activated(GtkTreeView* tree_view, GtkTreePath* path, G //----------------------------------------------------------------------------- -gboolean LauncherView::test_row_toggle() +gboolean LauncherTreeView::test_row_toggle() { bool allow = !m_row_activated; m_row_activated = false; diff --git a/panel-plugin/launcher-view.h b/panel-plugin/launcher-tree-view.h similarity index 84% copy from panel-plugin/launcher-view.h copy to panel-plugin/launcher-tree-view.h index 95c28a4..4c0a30f 100644 --- a/panel-plugin/launcher-view.h +++ b/panel-plugin/launcher-tree-view.h @@ -15,19 +15,19 @@ * along with this library. If not, see <http://www.gnu.org/licenses/>. */ -#ifndef WHISKERMENU_LAUNCHER_VIEW_H -#define WHISKERMENU_LAUNCHER_VIEW_H +#ifndef WHISKERMENU_LAUNCHER_TREE_VIEW_H +#define WHISKERMENU_LAUNCHER_TREE_VIEW_H -#include <gtk/gtk.h> +#include "launcher-view.h" namespace WhiskerMenu { -class LauncherView +class LauncherTreeView : public LauncherView { public: - LauncherView(); - ~LauncherView(); + LauncherTreeView(); + ~LauncherTreeView(); GtkWidget* get_widget() const { @@ -48,13 +48,9 @@ public: void hide_tooltips(); void show_tooltips(); + void clear_selection(); void collapse_all(); - GtkTreeModel* get_model() const - { - return m_model; - } - void set_model(GtkTreeModel* model); void unset_model(); @@ -65,15 +61,6 @@ public: void reload_icon_size(); - enum Columns - { - COLUMN_ICON = 0, - COLUMN_TEXT, - COLUMN_TOOLTIP, - COLUMN_LAUNCHER, - N_COLUMNS - }; - private: void create_column(); gboolean on_key_press_event(GtkWidget*, GdkEvent* event); @@ -83,7 +70,6 @@ private: gboolean test_row_toggle(); private: - GtkTreeModel* m_model; GtkTreeView* m_view; GtkTreeViewColumn* m_column; int m_icon_size; @@ -92,4 +78,4 @@ private: } -#endif // WHISKERMENU_LAUNCHER_VIEW_H +#endif // WHISKERMENU_LAUNCHER_TREE_VIEW_H diff --git a/panel-plugin/launcher-view.h b/panel-plugin/launcher-view.h index 95c28a4..976f686 100644 --- a/panel-plugin/launcher-view.h +++ b/panel-plugin/launcher-view.h @@ -26,44 +26,48 @@ namespace WhiskerMenu class LauncherView { public: - LauncherView(); - ~LauncherView(); + LauncherView() : + m_model(NULL) + { + } - GtkWidget* get_widget() const + virtual ~LauncherView() { - return GTK_WIDGET(m_view); } - GtkTreePath* get_cursor() const; - GtkTreePath* get_path_at_pos(int x, int y) const; - GtkTreePath* get_selected_path() const; - void activate_path(GtkTreePath* path); - void scroll_to_path(GtkTreePath* path); - void select_path(GtkTreePath* path); - void set_cursor(GtkTreePath* path); + virtual GtkWidget* get_widget() const=0; - void set_fixed_height_mode(bool fixed_height); - void set_selection_mode(GtkSelectionMode mode); + virtual GtkTreePath* get_cursor() const=0; + virtual GtkTreePath* get_path_at_pos(int x, int y) const=0; + virtual GtkTreePath* get_selected_path() const=0; + virtual void activate_path(GtkTreePath* path)=0; + virtual void scroll_to_path(GtkTreePath* path)=0; + virtual void select_path(GtkTreePath* path)=0; + virtual void set_cursor(GtkTreePath* path)=0; - void hide_tooltips(); - void show_tooltips(); + virtual void set_fixed_height_mode(bool fixed_height)=0; + virtual void set_selection_mode(GtkSelectionMode mode)=0; - void collapse_all(); + virtual void hide_tooltips()=0; + virtual void show_tooltips()=0; + + virtual void clear_selection()=0; + virtual void collapse_all()=0; GtkTreeModel* get_model() const { return m_model; } - void set_model(GtkTreeModel* model); - void unset_model(); + virtual void set_model(GtkTreeModel* model)=0; + virtual void unset_model()=0; - void set_drag_source(GdkModifierType start_button_mask, const GtkTargetEntry* targets, gint n_targets, GdkDragAction actions); - void set_drag_dest(const GtkTargetEntry* targets, gint n_targets, GdkDragAction actions); - void unset_drag_source(); - void unset_drag_dest(); + virtual void set_drag_source(GdkModifierType start_button_mask, const GtkTargetEntry* targets, gint n_targets, GdkDragAction actions)=0; + virtual void set_drag_dest(const GtkTargetEntry* targets, gint n_targets, GdkDragAction actions)=0; + virtual void unset_drag_source()=0; + virtual void unset_drag_dest()=0; - void reload_icon_size(); + virtual void reload_icon_size()=0; enum Columns { @@ -74,20 +78,8 @@ public: N_COLUMNS }; -private: - void create_column(); - gboolean on_key_press_event(GtkWidget*, GdkEvent* event); - gboolean on_key_release_event(GtkWidget*, GdkEvent* event); - gboolean on_button_press_event(GtkWidget*, GdkEvent* event); - void on_row_activated(GtkTreeView* tree_view, GtkTreePath* path, GtkTreeViewColumn* column); - gboolean test_row_toggle(); - -private: +protected: GtkTreeModel* m_model; - GtkTreeView* m_view; - GtkTreeViewColumn* m_column; - int m_icon_size; - bool m_row_activated; }; } diff --git a/panel-plugin/page.cpp b/panel-plugin/page.cpp index 3b84091..a48b107 100644 --- a/panel-plugin/page.cpp +++ b/panel-plugin/page.cpp @@ -19,7 +19,7 @@ #include "favorites-page.h" #include "launcher.h" -#include "launcher-view.h" +#include "launcher-tree-view.h" #include "recent-page.h" #include "slot.h" #include "window.h" @@ -40,14 +40,7 @@ Page::Page(Window* window) : m_reorderable(false) { // Create view - m_view = new LauncherView(); - g_signal_connect_slot(m_view->get_widget(), "button-press-event", &Page::view_button_press_event, this); - g_signal_connect_slot(m_view->get_widget(), "button-release-event", &Page::view_button_release_event, this); - g_signal_connect_slot(m_view->get_widget(), "drag-data-get", &Page::view_drag_data_get, this); - g_signal_connect_slot(m_view->get_widget(), "drag-end", &Page::view_drag_end, this); - g_signal_connect_slot(m_view->get_widget(), "popup-menu", &Page::view_popup_menu_event, this); - g_signal_connect_slot(m_view->get_widget(), "row-activated", &Page::item_activated, this); - g_signal_connect_swapped(m_view->get_widget(), "start-interactive-search", G_CALLBACK(gtk_widget_grab_focus), m_window->get_search_entry()); + create_view(); // Add scrolling to view m_widget = gtk_scrolled_window_new(NULL, NULL); @@ -124,6 +117,21 @@ void Page::set_reorderable(bool reorderable) //----------------------------------------------------------------------------- +void Page::create_view() +{ + m_view = new LauncherTreeView(); + g_signal_connect(m_view->get_widget(), "row-activated", G_CALLBACK(&Page::row_activated_slot), this); + g_signal_connect_swapped(m_view->get_widget(), "start-interactive-search", G_CALLBACK(gtk_widget_grab_focus), m_window->get_search_entry()); + g_signal_connect_slot(m_view->get_widget(), "button-press-event", &Page::view_button_press_event, this); + g_signal_connect_slot(m_view->get_widget(), "button-release-event", &Page::view_button_release_event, this); + g_signal_connect_slot(m_view->get_widget(), "drag-data-get", &Page::view_drag_data_get, this); + g_signal_connect_slot(m_view->get_widget(), "drag-end", &Page::view_drag_end, this); + g_signal_connect_slot(m_view->get_widget(), "popup-menu", &Page::view_popup_menu_event, this); + set_reorderable(m_reorderable); +} + +//----------------------------------------------------------------------------- + bool Page::remember_launcher(Launcher*) { return true; @@ -131,10 +139,10 @@ bool Page::remember_launcher(Launcher*) //----------------------------------------------------------------------------- -void Page::item_activated(GtkTreeView* view, GtkTreePath* path, GtkTreeViewColumn*) +void Page::launcher_activated(GtkTreePath* path) { GtkTreeIter iter; - GtkTreeModel* model = gtk_tree_view_get_model(view); + GtkTreeModel* model = m_view->get_model(); gtk_tree_model_get_iter(model, &iter, path); // Find element @@ -159,12 +167,12 @@ void Page::item_activated(GtkTreeView* view, GtkTreePath* path, GtkTreeViewColum m_window->hide(); // Execute app - element->run(gtk_widget_get_screen(GTK_WIDGET(view))); + element->run(gtk_widget_get_screen(m_widget)); } //----------------------------------------------------------------------------- -void Page::item_action_activated(GtkMenuItem* menuitem, DesktopAction* action) +void Page::launcher_action_activated(GtkMenuItem* menuitem, DesktopAction* action) { g_assert(m_selected_launcher != NULL); @@ -330,7 +338,7 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS GtkWidget* image = gtk_image_new_from_icon_name(action->get_icon(), GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image); G_GNUC_END_IGNORE_DEPRECATIONS - g_signal_connect_slot(menuitem, "activate", &Page::item_action_activated, this, action); + g_signal_connect_slot(menuitem, "activate", &Page::launcher_action_activated, this, action); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); } @@ -377,7 +385,6 @@ G_GNUC_END_IGNORE_DEPRECATIONS gtk_widget_show_all(menu); // Show context menu - gtk_tree_view_set_hover_selection(GTK_TREE_VIEW(m_view->get_widget()), false); gtk_menu_attach_to_widget(GTK_MENU(menu), m_view->get_widget(), NULL); gtk_menu_popup_at_pointer(GTK_MENU(menu), event); } @@ -388,8 +395,6 @@ void Page::destroy_context_menu(GtkMenuShell* menu) { m_selected_launcher = NULL; - gtk_tree_view_set_hover_selection(GTK_TREE_VIEW(m_view->get_widget()), true); - gtk_widget_destroy(GTK_WIDGET(menu)); m_window->on_context_menu_destroyed(); diff --git a/panel-plugin/page.h b/panel-plugin/page.h index cdfcaca..a38b17d 100644 --- a/panel-plugin/page.h +++ b/panel-plugin/page.h @@ -52,12 +52,17 @@ protected: return m_window; } + virtual void view_created() + { + } + void set_reorderable(bool reorderable); private: + void create_view(); virtual bool remember_launcher(Launcher* launcher); - void item_activated(GtkTreeView* view, GtkTreePath* path, GtkTreeViewColumn*); - void item_action_activated(GtkMenuItem* menuitem, DesktopAction* action); + void launcher_activated(GtkTreePath* path); + void launcher_action_activated(GtkMenuItem* menuitem, DesktopAction* action); gboolean view_button_press_event(GtkWidget* view, GdkEvent* event); gboolean view_button_release_event(GtkWidget*, GdkEvent* event); void view_drag_data_get(GtkWidget*, GdkDragContext*, GtkSelectionData* data, guint info, guint); @@ -73,6 +78,11 @@ private: void create_context_menu(GtkTreePath* path, GdkEvent* event); virtual void extend_context_menu(GtkWidget* menu); + static void row_activated_slot(GtkTreeView*, GtkTreePath* path, GtkTreeViewColumn*, gpointer user_data) + { + reinterpret_cast<Page*>(user_data)->launcher_activated(path); + } + private: Window* m_window; GtkWidget* m_widget; diff --git a/panel-plugin/search-page.cpp b/panel-plugin/search-page.cpp index 7a742aa..aac145c 100644 --- a/panel-plugin/search-page.cpp +++ b/panel-plugin/search-page.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013, 2016 Graeme Gott <[email protected]> + * Copyright (C) 2013, 2016, 2019 Graeme Gott <[email protected]> * * This library is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -35,7 +35,7 @@ using namespace WhiskerMenu; SearchPage::SearchPage(Window* window) : Page(window) { - get_view()->set_selection_mode(GTK_SELECTION_BROWSE); + view_created(); g_signal_connect_slot(window->get_search_entry(), "icon-release", &SearchPage::clear_search, this); g_signal_connect_slot(window->get_search_entry(), "key-press-event", &SearchPage::cancel_search, this); @@ -232,3 +232,10 @@ gboolean SearchPage::cancel_search(GtkWidget* widget, GdkEvent* event) } //----------------------------------------------------------------------------- + +void SearchPage::view_created() +{ + get_view()->set_selection_mode(GTK_SELECTION_BROWSE); +} + +//----------------------------------------------------------------------------- diff --git a/panel-plugin/search-page.h b/panel-plugin/search-page.h index 74a417a..bd81f63 100644 --- a/panel-plugin/search-page.h +++ b/panel-plugin/search-page.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013, 2015 Graeme Gott <[email protected]> + * Copyright (C) 2013, 2015, 2019 Graeme Gott <[email protected]> * * This library is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -42,6 +42,7 @@ private: void activate_search(); void clear_search(GtkEntry* entry, GtkEntryIconPosition icon_pos, GdkEvent*); gboolean cancel_search(GtkWidget* widget, GdkEvent* event); + void view_created(); private: Query m_query; -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list [email protected] https://mail.xfce.org/mailman/listinfo/xfce4-commits
