This is an automated email from the git hooks/post-receive script.

gottcode pushed a 
commit to branch 
master
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

Reply via email to