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 42697d2ed231028f3e1dee78ffbf9917f2c5e8c8
Author: Graeme Gott <[email protected]>
Date:   Mon Dec 30 07:29:35 2019 -0500

    Move drag code into page.
---
 panel-plugin/favorites-page.cpp |   4 +-
 panel-plugin/launcher-view.cpp  | 173 +++++++++-------------------------------
 panel-plugin/launcher-view.h    |  22 ++---
 panel-plugin/page.cpp           | 132 ++++++++++++++++++++++++++++--
 panel-plugin/page.h             |   8 ++
 5 files changed, 178 insertions(+), 161 deletions(-)

diff --git a/panel-plugin/favorites-page.cpp b/panel-plugin/favorites-page.cpp
index 93f3d56..89d57b8 100644
--- a/panel-plugin/favorites-page.cpp
+++ b/panel-plugin/favorites-page.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013, 2015, 2016 Graeme Gott <[email protected]>
+ * Copyright (C) 2013, 2015, 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;
 FavoritesPage::FavoritesPage(Window* window) :
        Page(window)
 {
-       get_view()->set_reorderable(true);
+       set_reorderable(true);
 }
 
 //-----------------------------------------------------------------------------
diff --git a/panel-plugin/launcher-view.cpp b/panel-plugin/launcher-view.cpp
index 6ebdd6a..42a0bf1 100644
--- a/panel-plugin/launcher-view.cpp
+++ b/panel-plugin/launcher-view.cpp
@@ -17,12 +17,9 @@
 
 #include "launcher-view.h"
 
-#include "launcher.h"
+#include "category.h"
 #include "settings.h"
 #include "slot.h"
-#include "window.h"
-
-#include <algorithm>
 
 #include <exo/exo.h>
 #include <gdk/gdkkeysyms.h>
@@ -40,15 +37,10 @@ static gboolean is_separator(GtkTreeModel* model, 
GtkTreeIter* iter, gpointer)
 
 //-----------------------------------------------------------------------------
 
-LauncherView::LauncherView(Window* window) :
-       m_window(window),
+LauncherView::LauncherView() :
        m_model(NULL),
        m_icon_size(0),
-       m_pressed_launcher(NULL),
-       m_drag_enabled(true),
-       m_launcher_dragged(false),
-       m_row_activated(false),
-       m_reorderable(false)
+       m_row_activated(false)
 {
        // Create the view
        m_view = GTK_TREE_VIEW(exo_tree_view_new());
@@ -73,13 +65,9 @@ LauncherView::LauncherView(Window* window) :
 
        // 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, "button-release-event", 
&LauncherView::on_button_release_event, this);
-       g_signal_connect_slot(m_view, "drag-data-get", 
&LauncherView::on_drag_data_get, this);
-       g_signal_connect_slot(m_view, "drag-end", &LauncherView::on_drag_end, 
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);
-       set_reorderable(false);
 }
 
 //-----------------------------------------------------------------------------
@@ -167,47 +155,6 @@ void LauncherView::set_fixed_height_mode(bool fixed_height)
 
 //-----------------------------------------------------------------------------
 
-void LauncherView::set_reorderable(bool reorderable)
-{
-       m_reorderable = reorderable;
-       if (m_reorderable)
-       {
-               const GtkTargetEntry row_targets[] = {
-                       { g_strdup("GTK_TREE_MODEL_ROW"), 
GTK_TARGET_SAME_WIDGET, 0 },
-                       { g_strdup("text/uri-list"), GTK_TARGET_OTHER_APP, 1 }
-               };
-
-               gtk_tree_view_enable_model_drag_source(m_view,
-                               GDK_BUTTON1_MASK,
-                               row_targets, 2,
-                               GdkDragAction(GDK_ACTION_MOVE | 
GDK_ACTION_COPY));
-
-               gtk_tree_view_enable_model_drag_dest(m_view,
-                               row_targets, 1,
-                               GDK_ACTION_MOVE);
-
-               g_free(row_targets[0].target);
-               g_free(row_targets[1].target);
-       }
-       else
-       {
-               const GtkTargetEntry row_targets[] = {
-                       { g_strdup("text/uri-list"), GTK_TARGET_OTHER_APP, 1 }
-               };
-
-               gtk_tree_view_enable_model_drag_source(m_view,
-                               GDK_BUTTON1_MASK,
-                               row_targets, 1,
-                               GDK_ACTION_COPY);
-
-               gtk_tree_view_unset_rows_drag_dest(m_view);
-
-               g_free(row_targets[0].target);
-       }
-}
-
-//-----------------------------------------------------------------------------
-
 void LauncherView::set_selection_mode(GtkSelectionMode mode)
 {
        GtkTreeSelection* selection = gtk_tree_view_get_selection(m_view);
@@ -253,6 +200,34 @@ void LauncherView::unset_model()
 
 //-----------------------------------------------------------------------------
 
+void LauncherView::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)
+{
+       gtk_tree_view_enable_model_drag_dest(m_view, targets, n_targets, 
actions);
+}
+
+//-----------------------------------------------------------------------------
+
+void LauncherView::unset_drag_source()
+{
+       gtk_tree_view_unset_rows_drag_source(m_view);
+}
+
+//-----------------------------------------------------------------------------
+
+void LauncherView::unset_drag_dest()
+{
+       gtk_tree_view_unset_rows_drag_dest(m_view);
+}
+
+//-----------------------------------------------------------------------------
+
 void LauncherView::reload_icon_size()
 {
        // Force exo to reload SVG icons
@@ -318,96 +293,22 @@ gboolean LauncherView::on_key_release_event(GtkWidget*, 
GdkEvent* event)
 
 //-----------------------------------------------------------------------------
 
-gboolean LauncherView::on_button_press_event(GtkWidget*, GdkEvent* event)
+gboolean LauncherView::on_button_press_event(GtkWidget*, GdkEvent*)
 {
        m_row_activated = false;
 
-       GdkEventButton* button_event = reinterpret_cast<GdkEventButton*>(event);
-       if (button_event->button != 1)
-       {
-               return false;
-       }
-
-       m_launcher_dragged = false;
-       m_pressed_launcher = NULL;
-
-       GtkTreeIter iter;
-       if 
(!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(m_view), NULL, 
&iter))
-       {
-               return false;
-       }
-
-       gtk_tree_model_get(m_model, &iter, LauncherView::COLUMN_LAUNCHER, 
&m_pressed_launcher, -1);
-       if (!m_pressed_launcher || (m_pressed_launcher->get_type() != 
Launcher::Type))
-       {
-               m_pressed_launcher = NULL;
-               m_drag_enabled = false;
-               gtk_tree_view_unset_rows_drag_source(m_view);
-               gtk_tree_view_unset_rows_drag_dest(m_view);
-       }
-       else if (!m_drag_enabled)
-       {
-               m_drag_enabled = true;
-               set_reorderable(m_reorderable);
-       }
-
-       return false;
-}
-
-//-----------------------------------------------------------------------------
-
-gboolean LauncherView::on_button_release_event(GtkWidget*, GdkEvent* event)
-{
-       GdkEventButton* button_event = reinterpret_cast<GdkEventButton*>(event);
-       if (button_event->button != 1)
-       {
-               return false;
-       }
-
-       if (m_launcher_dragged)
-       {
-               m_window->hide();
-               m_launcher_dragged = false;
-       }
        return false;
 }
 
 //-----------------------------------------------------------------------------
 
-void LauncherView::on_drag_data_get(GtkWidget*, GdkDragContext*, 
GtkSelectionData* data, guint info, guint)
-{
-       if ((info != 1) || !m_pressed_launcher)
-       {
-               return;
-       }
-
-       gchar* uris[2] = { m_pressed_launcher->get_uri(), NULL };
-       if (uris[0] != NULL)
-       {
-               gtk_selection_data_set_uris(data, uris);
-               g_free(uris[0]);
-       }
-
-       m_launcher_dragged = true;
-}
-
-//-----------------------------------------------------------------------------
-
-void LauncherView::on_drag_end(GtkWidget*, GdkDragContext*)
-{
-       if (m_launcher_dragged)
-       {
-               m_window->hide();
-               m_launcher_dragged = false;
-       }
-       m_pressed_launcher = NULL;
-}
-
-//-----------------------------------------------------------------------------
-
 void LauncherView::on_row_activated(GtkTreeView* tree_view, GtkTreePath* path, 
GtkTreeViewColumn*)
 {
-       if (m_pressed_launcher)
+       Element* element = NULL;
+       GtkTreeIter iter;
+       gtk_tree_model_get_iter(m_model, &iter, path);
+       gtk_tree_model_get(m_model, &iter, COLUMN_LAUNCHER, &element, -1);
+       if (element && (element->get_type() != Category::Type))
        {
                return;
        }
diff --git a/panel-plugin/launcher-view.h b/panel-plugin/launcher-view.h
index a80f131..95c28a4 100644
--- a/panel-plugin/launcher-view.h
+++ b/panel-plugin/launcher-view.h
@@ -23,14 +23,10 @@
 namespace WhiskerMenu
 {
 
-class IconSize;
-class Launcher;
-class Window;
-
 class LauncherView
 {
 public:
-       LauncherView(Window* window);
+       LauncherView();
        ~LauncherView();
 
        GtkWidget* get_widget() const
@@ -47,7 +43,6 @@ public:
        void set_cursor(GtkTreePath* path);
 
        void set_fixed_height_mode(bool fixed_height);
-       void set_reorderable(bool reorderable);
        void set_selection_mode(GtkSelectionMode mode);
 
        void hide_tooltips();
@@ -63,6 +58,11 @@ public:
        void set_model(GtkTreeModel* model);
        void unset_model();
 
+       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();
+
        void reload_icon_size();
 
        enum Columns
@@ -79,25 +79,15 @@ private:
        gboolean on_key_press_event(GtkWidget*, GdkEvent* event);
        gboolean on_key_release_event(GtkWidget*, GdkEvent* event);
        gboolean on_button_press_event(GtkWidget*, GdkEvent* event);
-       gboolean on_button_release_event(GtkWidget*, GdkEvent* event);
-       void on_drag_data_get(GtkWidget*, GdkDragContext*, GtkSelectionData* 
data, guint info, guint);
-       void on_drag_end(GtkWidget*, GdkDragContext*);
        void on_row_activated(GtkTreeView* tree_view, GtkTreePath* path, 
GtkTreeViewColumn* column);
        gboolean test_row_toggle();
 
 private:
-       Window* m_window;
-
        GtkTreeModel* m_model;
        GtkTreeView* m_view;
        GtkTreeViewColumn* m_column;
        int m_icon_size;
-
-       Launcher* m_pressed_launcher;
-       bool m_drag_enabled;
-       bool m_launcher_dragged;
        bool m_row_activated;
-       bool m_reorderable;
 };
 
 }
diff --git a/panel-plugin/page.cpp b/panel-plugin/page.cpp
index 45c66ce..3b84091 100644
--- a/panel-plugin/page.cpp
+++ b/panel-plugin/page.cpp
@@ -34,11 +34,17 @@ using namespace WhiskerMenu;
 
 Page::Page(Window* window) :
        m_window(window),
-       m_selected_launcher(NULL)
+       m_selected_launcher(NULL),
+       m_drag_enabled(true),
+       m_launcher_dragged(false),
+       m_reorderable(false)
 {
        // Create view
-       m_view = new LauncherView(window);
+       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());
@@ -80,6 +86,44 @@ void Page::reset_selection()
 
 //-----------------------------------------------------------------------------
 
+void Page::set_reorderable(bool reorderable)
+{
+       m_reorderable = reorderable;
+       if (m_reorderable)
+       {
+               const GtkTargetEntry row_targets[] = {
+                       { g_strdup("GTK_TREE_MODEL_ROW"), 
GTK_TARGET_SAME_WIDGET, 0 },
+                       { g_strdup("text/uri-list"), GTK_TARGET_OTHER_APP, 1 }
+               };
+
+               m_view->set_drag_source(GDK_BUTTON1_MASK,
+                               row_targets, 2,
+                               GdkDragAction(GDK_ACTION_MOVE | 
GDK_ACTION_COPY));
+
+               m_view->set_drag_dest(row_targets, 1,
+                               GDK_ACTION_MOVE);
+
+               g_free(row_targets[0].target);
+               g_free(row_targets[1].target);
+       }
+       else
+       {
+               const GtkTargetEntry row_targets[] = {
+                       { g_strdup("text/uri-list"), GTK_TARGET_OTHER_APP, 1 }
+               };
+
+               m_view->set_drag_source(GDK_BUTTON1_MASK,
+                               row_targets, 1,
+                               GDK_ACTION_COPY);
+
+               m_view->unset_drag_dest();
+
+               g_free(row_targets[0].target);
+       }
+}
+
+//-----------------------------------------------------------------------------
+
 bool Page::remember_launcher(Launcher*)
 {
        return true;
@@ -142,20 +186,94 @@ void Page::item_action_activated(GtkMenuItem* menuitem, 
DesktopAction* action)
 gboolean Page::view_button_press_event(GtkWidget*, GdkEvent* event)
 {
        GdkEventButton* button_event = reinterpret_cast<GdkEventButton*>(event);
-       if (button_event->button != 3)
+
+       m_launcher_dragged = false;
+
+       GtkTreePath* path = m_view->get_path_at_pos(button_event->x, 
button_event->y);
+       if (!path)
        {
                return false;
        }
 
-       GtkTreePath* path = m_view->get_path_at_pos(button_event->x, 
button_event->y);
-       if (!path)
+       if (button_event->button == 3)
        {
+               create_context_menu(path, event);
+               return true;
+       }
+       else if (button_event->button != 1)
+       {
+               gtk_tree_path_free(path);
                return false;
        }
 
-       create_context_menu(path, event);
+       GtkTreeModel* model = m_view->get_model();
+       GtkTreeIter iter;
+       gtk_tree_model_get_iter(model, &iter, path);
+       gtk_tree_path_free(path);
+       gtk_tree_model_get(model, &iter, LauncherView::COLUMN_LAUNCHER, 
&m_selected_launcher, -1);
+       if (!m_selected_launcher || (m_selected_launcher->get_type() != 
Launcher::Type))
+       {
+               m_selected_launcher = NULL;
+               m_drag_enabled = false;
+               m_view->unset_drag_source();
+               m_view->unset_drag_dest();
+       }
+       else if (!m_drag_enabled)
+       {
+               m_drag_enabled = true;
+               set_reorderable(m_reorderable);
+       }
 
-       return true;
+       return false;
+}
+
+//-----------------------------------------------------------------------------
+
+gboolean Page::view_button_release_event(GtkWidget*, GdkEvent* event)
+{
+       GdkEventButton* button_event = reinterpret_cast<GdkEventButton*>(event);
+       if (button_event->button != 1)
+       {
+               return false;
+       }
+
+       if (m_launcher_dragged)
+       {
+               m_window->hide();
+               m_launcher_dragged = false;
+       }
+
+       return false;
+}
+
+//-----------------------------------------------------------------------------
+
+void Page::view_drag_data_get(GtkWidget*, GdkDragContext*, GtkSelectionData* 
data, guint info, guint)
+{
+       if ((info != 1) || !m_selected_launcher)
+       {
+               return;
+       }
+
+       gchar* uris[2] = { m_selected_launcher->get_uri(), NULL };
+       if (uris[0] != NULL)
+       {
+               gtk_selection_data_set_uris(data, uris);
+               g_free(uris[0]);
+       }
+
+       m_launcher_dragged = true;
+}
+
+//-----------------------------------------------------------------------------
+
+void Page::view_drag_end(GtkWidget*, GdkDragContext*)
+{
+       if (m_launcher_dragged)
+       {
+               m_window->hide();
+               m_launcher_dragged = false;
+       }
 }
 
 //-----------------------------------------------------------------------------
diff --git a/panel-plugin/page.h b/panel-plugin/page.h
index 58968bb..cdfcaca 100644
--- a/panel-plugin/page.h
+++ b/panel-plugin/page.h
@@ -52,11 +52,16 @@ protected:
                return m_window;
        }
 
+       void set_reorderable(bool reorderable);
+
 private:
        virtual bool remember_launcher(Launcher* launcher);
        void item_activated(GtkTreeView* view, GtkTreePath* path, 
GtkTreeViewColumn*);
        void item_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);
+       void view_drag_end(GtkWidget*, GdkDragContext*);
        gboolean view_popup_menu_event(GtkWidget* view);
        void on_unmap();
        void destroy_context_menu(GtkMenuShell* menu);
@@ -73,6 +78,9 @@ private:
        GtkWidget* m_widget;
        LauncherView* m_view;
        Launcher* m_selected_launcher;
+       bool m_drag_enabled;
+       bool m_launcher_dragged;
+       bool m_reorderable;
 };
 
 }

-- 
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