[Xfce4-commits] [panel-plugins/xfce4-whiskermenu-plugin] 01/10: Refactor fetching selected launcher.

noreply at xfce.org noreply at xfce.org
Tue Dec 31 11:39:50 CET 2019


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 40472fa17decd2711b587f4b514b1263893f974e
Author: Graeme Gott <graeme at gottcode.org>
Date:   Mon Dec 30 06:54:00 2019 -0500

    Refactor fetching selected launcher.
---
 panel-plugin/launcher-view.cpp |  20 ++++++-
 panel-plugin/launcher-view.h   |   4 +-
 panel-plugin/page.cpp          | 122 +++++++++++++++++------------------------
 panel-plugin/page.h            |   7 +--
 4 files changed, 74 insertions(+), 79 deletions(-)

diff --git a/panel-plugin/launcher-view.cpp b/panel-plugin/launcher-view.cpp
index dd4366d..6ebdd6a 100644
--- a/panel-plugin/launcher-view.cpp
+++ b/panel-plugin/launcher-view.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013, 2016, 2018 Graeme Gott <graeme at gottcode.org>
+ * Copyright (C) 2013, 2016, 2018, 2019 Graeme Gott <graeme at gottcode.org>
  *
  * 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
@@ -94,6 +94,24 @@ LauncherView::~LauncherView()
 
 //-----------------------------------------------------------------------------
 
+GtkTreePath* LauncherView::get_cursor() const
+{
+	GtkTreePath* path = NULL;
+	gtk_tree_view_get_cursor(m_view, &path, NULL);
+	return path;
+}
+
+//-----------------------------------------------------------------------------
+
+GtkTreePath* LauncherView::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);
+	return path;
+}
+
+//-----------------------------------------------------------------------------
+
 GtkTreePath* LauncherView::get_selected_path() const
 {
 	GtkTreePath* path = NULL;
diff --git a/panel-plugin/launcher-view.h b/panel-plugin/launcher-view.h
index c20e826..a80f131 100644
--- a/panel-plugin/launcher-view.h
+++ b/panel-plugin/launcher-view.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013, 2016 Graeme Gott <graeme at gottcode.org>
+ * Copyright (C) 2013, 2016, 2019 Graeme Gott <graeme at gottcode.org>
  *
  * 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
@@ -38,6 +38,8 @@ public:
 		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);
diff --git a/panel-plugin/page.cpp b/panel-plugin/page.cpp
index eab9629..45c66ce 100644
--- a/panel-plugin/page.cpp
+++ b/panel-plugin/page.cpp
@@ -34,7 +34,7 @@ using namespace WhiskerMenu;
 
 Page::Page(Window* window) :
 	m_window(window),
-	m_selected_path(NULL)
+	m_selected_launcher(NULL)
 {
 	// Create view
 	m_view = new LauncherView(window);
@@ -55,11 +55,6 @@ Page::Page(Window* window) :
 
 Page::~Page()
 {
-	if (m_selected_path)
-	{
-		gtk_tree_path_free(m_selected_path);
-	}
-
 	delete m_view;
 	gtk_widget_destroy(m_widget);
 	g_object_unref(m_widget);
@@ -85,21 +80,6 @@ void Page::reset_selection()
 
 //-----------------------------------------------------------------------------
 
-Launcher* Page::get_selected_launcher() const
-{
-	Launcher* launcher = NULL;
-	if (m_selected_path)
-	{
-		GtkTreeModel* model = m_view->get_model();
-		GtkTreeIter iter;
-		gtk_tree_model_get_iter(model, &iter, m_selected_path);
-		gtk_tree_model_get(model, &iter, LauncherView::COLUMN_LAUNCHER, &launcher, -1);
-	}
-	return (launcher && (launcher->get_type() == Launcher::Type)) ? launcher : NULL;
-}
-
-//-----------------------------------------------------------------------------
-
 bool Page::remember_launcher(Launcher*)
 {
 	return true;
@@ -142,66 +122,70 @@ void Page::item_activated(GtkTreeView* view, GtkTreePath* path, GtkTreeViewColum
 
 void Page::item_action_activated(GtkMenuItem* menuitem, DesktopAction* action)
 {
-	Launcher* launcher = get_selected_launcher();
-	if (!launcher)
-	{
-		return;
-	}
+	g_assert(m_selected_launcher != NULL);
 
 	// Add to recent
-	if (remember_launcher(launcher))
+	if (remember_launcher(m_selected_launcher))
 	{
-		m_window->get_recent()->add(launcher);
+		m_window->get_recent()->add(m_selected_launcher);
 	}
 
 	// Hide window
 	m_window->hide();
 
 	// Execute app
-	launcher->run(gtk_widget_get_screen(GTK_WIDGET(menuitem)), action);
+	m_selected_launcher->run(gtk_widget_get_screen(GTK_WIDGET(menuitem)), action);
 }
 
 //-----------------------------------------------------------------------------
 
-gboolean Page::view_button_press_event(GtkWidget* view, GdkEvent* event)
+gboolean Page::view_button_press_event(GtkWidget*, GdkEvent* event)
 {
-	GdkEventButton* event_button = reinterpret_cast<GdkEventButton*>(event);
-	GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
-	GtkTreeIter iter;
-	if (gtk_tree_selection_get_selected(selection, NULL, &iter)
-			&& (event_button->type == GDK_BUTTON_PRESS)
-			&& (event_button->button == 3))
+	GdkEventButton* button_event = reinterpret_cast<GdkEventButton*>(event);
+	if (button_event->button != 3)
 	{
-		create_context_menu(&iter, event);
-		return true;
+		return false;
 	}
 
-	return false;
+	GtkTreePath* path = m_view->get_path_at_pos(button_event->x, button_event->y);
+	if (!path)
+	{
+		return false;
+	}
+
+	create_context_menu(path, event);
+
+	return true;
 }
 
 //-----------------------------------------------------------------------------
 
-gboolean Page::view_popup_menu_event(GtkWidget* view)
+gboolean Page::view_popup_menu_event(GtkWidget*)
 {
-	GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
-	GtkTreeIter iter;
-	if (gtk_tree_selection_get_selected(selection, NULL, &iter))
+	GtkTreePath* path = m_view->get_cursor();
+	if (!path)
 	{
-		create_context_menu(&iter, NULL);
-		return true;
+		return false;
 	}
 
-	return false;
+	create_context_menu(path, NULL);
+
+	return true;
 }
 
 //-----------------------------------------------------------------------------
 
-void Page::create_context_menu(GtkTreeIter* iter, GdkEvent* event)
+void Page::create_context_menu(GtkTreePath* path, GdkEvent* event)
 {
-	m_selected_path = gtk_tree_model_get_path(m_view->get_model(), iter);
-	Launcher* launcher = get_selected_launcher();
-	if (!launcher)
+	// Get selected launcher
+	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;
 		return;
 	}
 
@@ -210,14 +194,14 @@ void Page::create_context_menu(GtkTreeIter* iter, GdkEvent* event)
 	g_signal_connect_slot(menu, "selection-done", &Page::destroy_context_menu, this);
 
 	// Add menu items
-	GtkWidget* menuitem = gtk_menu_item_new_with_label(launcher->get_display_name());
+	GtkWidget* menuitem = gtk_menu_item_new_with_label(m_selected_launcher->get_display_name());
 	gtk_widget_set_sensitive(menuitem, false);
 	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
 
 	menuitem = gtk_separator_menu_item_new();
 	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
 
-	const std::vector<DesktopAction*> actions = launcher->get_actions();
+	const std::vector<DesktopAction*> actions = m_selected_launcher->get_actions();
 	if (!actions.empty())
 	{
 		for (std::vector<DesktopAction*>::size_type i = 0, end = actions.size(); i < end; ++i)
@@ -237,7 +221,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
 	}
 
 G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-	if (!m_window->get_favorites()->contains(launcher))
+	if (!m_window->get_favorites()->contains(m_selected_launcher))
 	{
 		menuitem = gtk_image_menu_item_new_with_label(_("Add to Favorites"));
 		GtkWidget* image = gtk_image_new_from_icon_name("bookmark-new", GTK_ICON_SIZE_MENU);
@@ -284,11 +268,8 @@ G_GNUC_END_IGNORE_DEPRECATIONS
 
 void Page::destroy_context_menu(GtkMenuShell* menu)
 {
-	if (m_selected_path)
-	{
-		gtk_tree_path_free(m_selected_path);
-		m_selected_path = NULL;
-	}
+	m_selected_launcher = NULL;
+
 	gtk_tree_view_set_hover_selection(GTK_TREE_VIEW(m_view->get_widget()), true);
 
 	gtk_widget_destroy(GTK_WIDGET(menu));
@@ -311,9 +292,8 @@ void Page::add_selected_to_desktop()
 	GFile* desktop_folder = g_file_new_for_path(desktop_path);
 
 	// Fetch launcher source
-	Launcher* launcher = get_selected_launcher();
-	g_assert(launcher != NULL);
-	GFile* source_file = launcher->get_file();
+	g_assert(m_selected_launcher != NULL);
+	GFile* source_file = m_selected_launcher->get_file();
 
 	// Fetch launcher destination
 	char* basename = g_file_get_basename(source_file);
@@ -357,9 +337,8 @@ void Page::add_selected_to_panel()
 	if (proxy)
 	{
 		// Fetch launcher desktop ID
-		Launcher* launcher = get_selected_launcher();
-		g_assert(launcher != NULL);
-		const gchar* parameters[] = { launcher->get_desktop_id(), NULL };
+		g_assert(m_selected_launcher != NULL);
+		const gchar* parameters[] = { m_selected_launcher->get_desktop_id(), NULL };
 
 		// Tell panel to add item
 		if (!g_dbus_proxy_call_sync(proxy,
@@ -388,22 +367,20 @@ void Page::add_selected_to_panel()
 
 void Page::add_selected_to_favorites()
 {
-	Launcher* launcher = get_selected_launcher();
-	g_assert(launcher != NULL);
-	m_window->get_favorites()->add(launcher);
+	g_assert(m_selected_launcher != NULL);
+	m_window->get_favorites()->add(m_selected_launcher);
 }
 
 //-----------------------------------------------------------------------------
 
 void Page::edit_selected()
 {
-	Launcher* launcher = get_selected_launcher();
-	g_assert(launcher != NULL);
+	g_assert(m_selected_launcher != NULL);
 
 	m_window->hide();
 
 	GError* error = NULL;
-	gchar* uri = launcher->get_uri();
+	gchar* uri = m_selected_launcher->get_uri();
 	gchar* quoted_uri = g_shell_quote(uri);
 	gchar* command = g_strconcat("exo-desktop-item-edit ", quoted_uri, NULL);
 	g_free(uri);
@@ -420,9 +397,8 @@ void Page::edit_selected()
 
 void Page::remove_selected_from_favorites()
 {
-	Launcher* launcher = get_selected_launcher();
-	g_assert(launcher != NULL);
-	m_window->get_favorites()->remove(launcher);
+	g_assert(m_selected_launcher != NULL);
+	m_window->get_favorites()->remove(m_selected_launcher);
 }
 
 //-----------------------------------------------------------------------------
diff --git a/panel-plugin/page.h b/panel-plugin/page.h
index 5ec3984..58968bb 100644
--- a/panel-plugin/page.h
+++ b/panel-plugin/page.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013, 2017, 2018 Graeme Gott <graeme at gottcode.org>
+ * Copyright (C) 2013, 2017, 2018, 2019 Graeme Gott <graeme at gottcode.org>
  *
  * 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
@@ -65,15 +65,14 @@ private:
 	void add_selected_to_favorites();
 	void edit_selected();
 	void remove_selected_from_favorites();
-	Launcher* get_selected_launcher() const;
-	void create_context_menu(GtkTreeIter* iter, GdkEvent* event);
+	void create_context_menu(GtkTreePath* path, GdkEvent* event);
 	virtual void extend_context_menu(GtkWidget* menu);
 
 private:
 	Window* m_window;
 	GtkWidget* m_widget;
 	LauncherView* m_view;
-	GtkTreePath* m_selected_path;
+	Launcher* m_selected_launcher;
 };
 
 }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list