[gnome-builder] plugins/grep: port plugin to GTK 4
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] plugins/grep: port plugin to GTK 4
- Date: Tue, 12 Jul 2022 06:39:16 +0000 (UTC)
commit 63745eaaa8e0a621485a0ade45e55563863fe800
Author: Christian Hergert <chergert redhat com>
Date: Mon Jul 11 22:52:53 2022 -0700
plugins/grep: port plugin to GTK 4
- Remove libdazzle usage
- Use libpanel/libide-gui
- Remove editor addin
- Add workspace addin
src/plugins/grep/gbp-grep-editor-addin.c | 133 ---------------------
src/plugins/grep/gbp-grep-panel.c | 81 ++++++-------
src/plugins/grep/gbp-grep-panel.h | 4 +-
src/plugins/grep/gbp-grep-panel.ui | 41 +++----
src/plugins/grep/gbp-grep-popover.c | 26 ++--
src/plugins/grep/gbp-grep-tree-addin.c | 37 +++---
src/plugins/grep/gbp-grep-workspace-addin.c | 116 ++++++++++++++++++
...p-editor-addin.h => gbp-grep-workspace-addin.h} | 6 +-
src/plugins/grep/grep-plugin.c | 9 +-
src/plugins/grep/grep.plugin | 3 +-
src/plugins/grep/gtk/menus.ui | 2 +-
src/plugins/grep/meson.build | 2 +-
12 files changed, 223 insertions(+), 237 deletions(-)
---
diff --git a/src/plugins/grep/gbp-grep-panel.c b/src/plugins/grep/gbp-grep-panel.c
index 477324918..36cb8f1a6 100644
--- a/src/plugins/grep/gbp-grep-panel.c
+++ b/src/plugins/grep/gbp-grep-panel.c
@@ -23,6 +23,7 @@
#include "config.h"
#include <glib/gi18n.h>
+
#include <libide-code.h>
#include <libide-editor.h>
#include <libide-gui.h>
@@ -33,7 +34,7 @@
struct _GbpGrepPanel
{
- DzlDockWidget parent_instance;
+ IdePane parent_instance;
GCancellable *cancellable;
@@ -66,7 +67,7 @@ enum {
N_PROPS
};
-G_DEFINE_FINAL_TYPE (GbpGrepPanel, gbp_grep_panel, DZL_TYPE_DOCK_WIDGET)
+G_DEFINE_FINAL_TYPE (GbpGrepPanel, gbp_grep_panel, IDE_TYPE_PANE)
static GParamSpec *properties [N_PROPS];
@@ -241,13 +242,12 @@ gbp_grep_panel_row_activated_cb (GbpGrepPanel *self,
if G_LIKELY (line != NULL)
{
g_autoptr(IdeLocation) location = NULL;
+ g_autoptr(IdePanelPosition) position = NULL;
g_autoptr(GFile) child = NULL;
IdeWorkspace *workspace;
- IdeSurface *editor;
guint lineno = line->line;
workspace = ide_widget_get_workspace (GTK_WIDGET (self));
- editor = ide_workspace_get_surface_by_name (workspace, "editor");
if (lineno > 0)
lineno--;
@@ -255,7 +255,8 @@ gbp_grep_panel_row_activated_cb (GbpGrepPanel *self,
child = gbp_grep_model_get_file (GBP_GREP_MODEL (model), line->path);
location = ide_location_new (child, lineno, -1);
- ide_editor_surface_focus_location (IDE_EDITOR_SURFACE (editor), location);
+ position = ide_panel_position_new ();
+ ide_editor_focus_location (workspace, position, location);
}
}
}
@@ -289,14 +290,14 @@ static void
gbp_grep_panel_toggle_all_cb (GbpGrepPanel *self,
GtkTreeViewColumn *column)
{
- GtkToggleButton *toggle;
+ GtkCheckButton *toggle;
GtkTreeModel *model;
g_assert (GBP_IS_GREP_PANEL (self));
g_assert (GTK_IS_TREE_VIEW_COLUMN (column));
- toggle = GTK_TOGGLE_BUTTON (self->check);
- gtk_toggle_button_set_active (toggle, !gtk_toggle_button_get_active (toggle));
+ toggle = GTK_CHECK_BUTTON (self->check);
+ gtk_check_button_set_active (toggle, !gtk_check_button_get_active (toggle));
model = gtk_tree_view_get_model (self->tree_view);
gbp_grep_model_toggle_mode (GBP_GREP_MODEL (model));
@@ -339,7 +340,7 @@ gbp_grep_panel_replace_clicked_cb (GbpGrepPanel *self,
if (edits == NULL || edits->len == 0)
return;
- text = gtk_entry_get_text (self->replace_entry);
+ text = gtk_editable_get_text (GTK_EDITABLE (self->replace_entry));
for (guint i = 0; i < edits->len; i++)
{
@@ -374,7 +375,7 @@ gbp_grep_panel_find_entry_text_changed_cb (GbpGrepPanel *self,
g_assert (GBP_IS_GREP_PANEL (self));
g_assert (GTK_IS_ENTRY (entry));
- is_query_empty = (g_strcmp0 (gtk_entry_get_text (entry), "") == 0);
+ is_query_empty = (g_strcmp0 (gtk_editable_get_text (GTK_EDITABLE (entry)), "") == 0);
gtk_widget_set_sensitive (GTK_WIDGET (self->find_button), !is_query_empty);
}
@@ -394,7 +395,7 @@ gbp_grep_panel_close_panel_action (GSimpleAction *action,
is_project_wide = (model == NULL || gbp_grep_model_get_directory (model) == NULL);
if (!is_project_wide)
- gtk_widget_destroy (GTK_WIDGET (self));
+ ide_pane_destroy (IDE_PANE (self));
}
static void
@@ -404,7 +405,7 @@ gbp_grep_panel_close_clicked_cb (GbpGrepPanel *self,
g_assert (GBP_IS_GREP_PANEL (self));
g_assert (GTK_IS_BUTTON (button));
- gtk_widget_destroy (GTK_WIDGET (self));
+ ide_pane_destroy (IDE_PANE (self));
}
static void
@@ -452,9 +453,10 @@ gbp_grep_panel_scan_cb (GObject *object,
* box will unselect the items when it should have selected all of them. To avoid this,
* just set back the "Select all" check box to "selected" when starting a new search.
*/
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->check), TRUE);
+ gtk_check_button_set_active (GTK_CHECK_BUTTON (self->check), TRUE);
- ide_widget_reveal_and_grab (GTK_WIDGET (self->replace_entry));
+ panel_widget_raise (PANEL_WIDGET (self));
+ gtk_widget_grab_focus (GTK_WIDGET (self->replace_entry));
}
/**
@@ -485,19 +487,20 @@ gbp_grep_panel_launch_search (GbpGrepPanel *self)
model = gbp_grep_model_new (ide_widget_get_context (GTK_WIDGET (self)));
gbp_grep_model_set_directory (model, root_dir);
- gbp_grep_model_set_use_regex (model, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
(self->regex_button)));
- gbp_grep_model_set_at_word_boundaries (model, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
(self->whole_words_button)));
- gbp_grep_model_set_case_sensitive (model, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
(self->case_button)));
- gbp_grep_model_set_query (model, gtk_entry_get_text (self->find_entry));
+ gbp_grep_model_set_use_regex (model, gtk_check_button_get_active (GTK_CHECK_BUTTON (self->regex_button)));
+ gbp_grep_model_set_at_word_boundaries (model, gtk_check_button_get_active (GTK_CHECK_BUTTON
(self->whole_words_button)));
+ gbp_grep_model_set_case_sensitive (model, gtk_check_button_get_active (GTK_CHECK_BUTTON
(self->case_button)));
+ gbp_grep_model_set_query (model, gtk_editable_get_text (GTK_EDITABLE (self->find_entry)));
- gbp_grep_model_set_recursive (model, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
(self->recursive_button)));
+ gbp_grep_model_set_recursive (model, gtk_check_button_get_active (GTK_CHECK_BUTTON
(self->recursive_button)));
gtk_stack_set_visible_child (self->stack, GTK_WIDGET (self->spinner));
gtk_spinner_start (self->spinner);
gtk_widget_set_sensitive (GTK_WIDGET (self->replace_button), FALSE);
gtk_widget_set_sensitive (GTK_WIDGET (self->replace_entry), FALSE);
- ide_widget_reveal_and_grab (GTK_WIDGET (self));
+ panel_widget_raise (PANEL_WIDGET (self));
+ gtk_widget_grab_focus (GTK_WIDGET (self));
/* We allow making a new search even if there's already one running, but cancel the previous
* one to make sure it doesn't needlessly use resources for the grep process that's still
@@ -540,14 +543,14 @@ on_entry_activate_toggle_action_button_cb (GtkEntry *entry,
g_signal_emit_by_name (button, "activate", NULL);
}
-static void
+static gboolean
gbp_grep_panel_grab_focus (GtkWidget *widget)
{
GbpGrepPanel *self = (GbpGrepPanel *)widget;
g_assert (GBP_IS_GREP_PANEL (self));
- gtk_widget_grab_focus (GTK_WIDGET (self->find_entry));
+ return gtk_widget_grab_focus (GTK_WIDGET (self->find_entry));
}
static void
@@ -651,8 +654,6 @@ static void
gbp_grep_panel_init (GbpGrepPanel *self)
{
g_autoptr(GSimpleActionGroup) group = NULL;
- DzlShortcutController *controller;
-
GtkTreeViewColumn *column;
GtkCellRenderer *cell;
@@ -663,14 +664,9 @@ gbp_grep_panel_init (GbpGrepPanel *self)
actions,
G_N_ELEMENTS (actions),
self);
- gtk_widget_insert_action_group (GTK_WIDGET (self), "grep", G_ACTION_GROUP (group));
-
- controller = dzl_shortcut_controller_find (GTK_WIDGET (self));
- dzl_shortcut_controller_add_command_action (controller,
- I_("org.gnome.builder.grep"),
- I_("Escape"),
- DZL_SHORTCUT_PHASE_BUBBLE,
- I_("grep.close-panel"));
+ gtk_widget_insert_action_group (GTK_WIDGET (self),
+ "grep",
+ G_ACTION_GROUP (group));
g_signal_connect (self->find_entry,
"activate",
@@ -716,7 +712,6 @@ gbp_grep_panel_init (GbpGrepPanel *self)
"margin-end", 6,
"margin-start", 6,
"margin-top", 3,
- "visible", TRUE,
"active", TRUE,
NULL);
self->toggle_column = g_object_new (GTK_TYPE_TREE_VIEW_COLUMN,
@@ -824,7 +819,8 @@ gbp_grep_panel_set_model (GbpGrepPanel *self,
gtk_widget_set_sensitive (GTK_WIDGET (self->replace_button), has_item);
gtk_widget_set_sensitive (GTK_WIDGET (self->replace_entry), has_item);
- gtk_entry_set_text (self->find_entry, gbp_grep_model_get_query (model));
+ gtk_editable_set_text (GTK_EDITABLE (self->find_entry),
+ gbp_grep_model_get_query (model));
gtk_widget_set_visible (GTK_WIDGET (self->close_button), !is_initial_panel);
@@ -843,14 +839,15 @@ gbp_grep_panel_set_model (GbpGrepPanel *self,
gtk_widget_set_visible (GTK_WIDGET (self->recursive_button), is_dir);
}
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->regex_button),
- gbp_grep_model_get_use_regex (model));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->whole_words_button),
- gbp_grep_model_get_at_word_boundaries (model));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->case_button),
- gbp_grep_model_get_case_sensitive (model));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->recursive_button),
- gbp_grep_model_get_recursive (model));
+
+ gtk_check_button_set_active (GTK_CHECK_BUTTON (self->regex_button),
+ gbp_grep_model_get_use_regex (model));
+ gtk_check_button_set_active (GTK_CHECK_BUTTON (self->whole_words_button),
+ gbp_grep_model_get_at_word_boundaries (model));
+ gtk_check_button_set_active (GTK_CHECK_BUTTON (self->case_button),
+ gbp_grep_model_get_case_sensitive (model));
+ gtk_check_button_set_active (GTK_CHECK_BUTTON (self->recursive_button),
+ gbp_grep_model_get_recursive (model));
}
gtk_tree_view_set_model (self->tree_view, GTK_TREE_MODEL (model));
diff --git a/src/plugins/grep/gbp-grep-panel.h b/src/plugins/grep/gbp-grep-panel.h
index 4b916b6f3..4e0f19e72 100644
--- a/src/plugins/grep/gbp-grep-panel.h
+++ b/src/plugins/grep/gbp-grep-panel.h
@@ -20,7 +20,7 @@
#pragma once
-#include <dazzle.h>
+#include <libide-gui.h>
#include "gbp-grep-model.h"
@@ -28,7 +28,7 @@ G_BEGIN_DECLS
#define GBP_TYPE_GREP_PANEL (gbp_grep_panel_get_type())
-G_DECLARE_FINAL_TYPE (GbpGrepPanel, gbp_grep_panel, GBP, GREP_PANEL, DzlDockWidget)
+G_DECLARE_FINAL_TYPE (GbpGrepPanel, gbp_grep_panel, GBP, GREP_PANEL, IdePane)
GtkWidget *gbp_grep_panel_new (void);
GbpGrepModel *gbp_grep_panel_get_model (GbpGrepPanel *self);
diff --git a/src/plugins/grep/gbp-grep-panel.ui b/src/plugins/grep/gbp-grep-panel.ui
index 90e1a29c7..e14d525cf 100644
--- a/src/plugins/grep/gbp-grep-panel.ui
+++ b/src/plugins/grep/gbp-grep-panel.ui
@@ -1,12 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
- <template class="GbpGrepPanel" parent="DzlDockWidget">
+ <template class="GbpGrepPanel" parent="IdePane">
<property name="icon-name">edit-find-symbolic</property>
<property name="title" translatable="yes">Find in Files</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<property name="vexpand">true</property>
+ <property name="hexpand">true</property>
<property name="visible">true</property>
<child>
<object class="GtkStack" id="stack">
@@ -125,14 +126,11 @@
<object class="GtkEntry" id="find_entry">
<property name="visible">true</property>
<property name="hexpand">true</property>
- <accessibility>
- <relation target="find_button" type="labelled-by"/>
- </accessibility>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
</object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">0</property>
- </packing>
</child>
<child>
<object class="GtkButton" id="find_button">
@@ -140,24 +138,21 @@
<property name="sensitive">false</property>
<property name="label" translatable="yes">_Find in Project</property>
<property name="use-underline">True</property>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ </layout>
</object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">0</property>
- </packing>
</child>
<child>
<object class="GtkEntry" id="replace_entry">
<property name="visible">true</property>
<property name="hexpand">true</property>
- <accessibility>
- <relation target="replace_button" type="labelled-by"/>
- </accessibility>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">1</property>
+ </layout>
</object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">1</property>
- </packing>
</child>
<child>
<object class="GtkButton" id="replace_button">
@@ -168,11 +163,11 @@
<style>
<class name="destructive-action"/>
</style>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">1</property>
+ </layout>
</object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">1</property>
- </packing>
</child>
</object>
</child>
diff --git a/src/plugins/grep/gbp-grep-popover.c b/src/plugins/grep/gbp-grep-popover.c
index 1f9ea7d62..6345ed427 100644
--- a/src/plugins/grep/gbp-grep-popover.c
+++ b/src/plugins/grep/gbp-grep-popover.c
@@ -60,11 +60,10 @@ gbp_grep_popover_button_clicked_cb (GbpGrepPopover *self,
GtkButton *button)
{
g_autoptr(GbpGrepModel) model = NULL;
- IdeSurface *editor;
+ g_autoptr(IdePanelPosition) position = NULL;
IdeWorkspace *workspace;
IdeContext *context;
GtkWidget *panel;
- GtkWidget *utils;
gboolean use_regex;
gboolean at_word_boundaries;
gboolean case_sensitive;
@@ -74,21 +73,22 @@ gbp_grep_popover_button_clicked_cb (GbpGrepPopover *self,
g_assert (GTK_IS_BUTTON (button));
workspace = ide_widget_get_workspace (GTK_WIDGET (self));
- editor = ide_workspace_get_surface_by_name (workspace, "editor");
- utils = ide_editor_surface_get_utilities (IDE_EDITOR_SURFACE (editor));
context = ide_widget_get_context (GTK_WIDGET (workspace));
- use_regex = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->regex_button));
- at_word_boundaries = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->whole_button));
- case_sensitive = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->case_button));
- recursive = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->recursive_button));
+ position = ide_panel_position_new ();
+ ide_panel_position_set_edge (position, PANEL_DOCK_POSITION_BOTTOM);
+
+ use_regex = gtk_check_button_get_active (GTK_CHECK_BUTTON (self->regex_button));
+ at_word_boundaries = gtk_check_button_get_active (GTK_CHECK_BUTTON (self->whole_button));
+ case_sensitive = gtk_check_button_get_active (GTK_CHECK_BUTTON (self->case_button));
+ recursive = gtk_check_button_get_active (GTK_CHECK_BUTTON (self->recursive_button));
model = gbp_grep_model_new (context);
gbp_grep_model_set_directory (model, self->file);
gbp_grep_model_set_use_regex (model, use_regex);
gbp_grep_model_set_at_word_boundaries (model, at_word_boundaries);
gbp_grep_model_set_case_sensitive (model, case_sensitive);
- gbp_grep_model_set_query (model, gtk_entry_get_text (self->entry));
+ gbp_grep_model_set_query (model, gtk_editable_get_text (GTK_EDITABLE (self->entry)));
if (gtk_widget_get_visible (GTK_WIDGET (self->recursive_button)))
gbp_grep_model_set_recursive (model, recursive);
@@ -96,12 +96,12 @@ gbp_grep_popover_button_clicked_cb (GbpGrepPopover *self,
gbp_grep_model_set_recursive (model, FALSE);
panel = gbp_grep_panel_new ();
- gtk_container_add (GTK_CONTAINER (utils), panel);
+ ide_workspace_add_pane (workspace, IDE_PANE (panel), position);
gbp_grep_panel_set_model (GBP_GREP_PANEL (panel), model);
- gtk_widget_show (panel);
+ panel_widget_raise (PANEL_WIDGET (panel));
+
+ gtk_popover_popdown (GTK_POPOVER (self));
- /* gtk_popover_popdown (GTK_POPOVER (self)); */
- gtk_widget_destroy (GTK_WIDGET (self));
gbp_grep_panel_launch_search (GBP_GREP_PANEL (panel));
}
diff --git a/src/plugins/grep/gbp-grep-tree-addin.c b/src/plugins/grep/gbp-grep-tree-addin.c
index c0ced9424..c9d561251 100644
--- a/src/plugins/grep/gbp-grep-tree-addin.c
+++ b/src/plugins/grep/gbp-grep-tree-addin.c
@@ -22,6 +22,7 @@
#include "config.h"
+#include <libide-gui.h>
#include <libide-projects.h>
#include <libide-tree.h>
@@ -30,9 +31,9 @@
struct _GbpGrepTreeAddin
{
- GObject parent_instance;
-
- IdeTree *tree;
+ GObject parent_instance;
+ IdeTree *tree;
+ GSimpleActionGroup *group;
};
static void
@@ -72,12 +73,13 @@ gbp_grep_tree_addin_load (IdeTreeAddin *addin,
IdeTree *tree,
IdeTreeModel *model)
{
- GbpGrepTreeAddin *self = (GbpGrepTreeAddin *)addin;
- g_autoptr(GActionMap) group = NULL;
static const GActionEntry actions[] = {
{ "find-in-files", find_in_files_action },
};
+ GbpGrepTreeAddin *self = (GbpGrepTreeAddin *)addin;
+ GtkWidget *pane;
+
g_assert (IDE_IS_MAIN_THREAD ());
g_assert (GBP_IS_GREP_TREE_ADDIN (self));
g_assert (IDE_IS_TREE (tree));
@@ -85,9 +87,17 @@ gbp_grep_tree_addin_load (IdeTreeAddin *addin,
self->tree = tree;
- group = G_ACTION_MAP (g_simple_action_group_new ());
- g_action_map_add_action_entries (group, actions, G_N_ELEMENTS (actions), self);
- gtk_widget_insert_action_group (GTK_WIDGET (tree), "grep", G_ACTION_GROUP (group));
+ pane = gtk_widget_get_ancestor (GTK_WIDGET (tree), IDE_TYPE_PANE);
+ g_assert (IDE_IS_PANE (pane));
+
+ self->group = g_simple_action_group_new ();
+ g_action_map_add_action_entries (G_ACTION_MAP (self->group),
+ actions,
+ G_N_ELEMENTS (actions),
+ self);
+ gtk_widget_insert_action_group (GTK_WIDGET (tree),
+ "grep",
+ G_ACTION_GROUP (self->group));
}
static void
@@ -103,7 +113,7 @@ gbp_grep_tree_addin_unload (IdeTreeAddin *addin,
g_assert (IDE_IS_TREE_MODEL (model));
gtk_widget_insert_action_group (GTK_WIDGET (tree), "grep", NULL);
-
+ g_clear_object (&self->group);
self->tree = NULL;
}
@@ -112,6 +122,7 @@ gbp_grep_tree_addin_selection_changed (IdeTreeAddin *addin,
IdeTreeNode *node)
{
GbpGrepTreeAddin *self = (GbpGrepTreeAddin *)addin;
+ GAction *action;
gboolean enabled;
g_assert (IDE_IS_MAIN_THREAD ());
@@ -119,10 +130,8 @@ gbp_grep_tree_addin_selection_changed (IdeTreeAddin *addin,
g_assert (!node || IDE_IS_TREE_NODE (node));
enabled = node && ide_tree_node_holds (node, IDE_TYPE_PROJECT_FILE);
-
- dzl_gtk_widget_action_set (GTK_WIDGET (self->tree), "grep", "find-in-files",
- "enabled", enabled,
- NULL);
+ action = g_action_map_lookup_action (G_ACTION_MAP (self->group), "find-in-files");
+ g_simple_action_set_enabled (G_SIMPLE_ACTION (action), enabled);
}
static void
@@ -134,7 +143,7 @@ tree_addin_iface_init (IdeTreeAddinInterface *iface)
}
G_DEFINE_FINAL_TYPE_WITH_CODE (GbpGrepTreeAddin, gbp_grep_tree_addin, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (IDE_TYPE_TREE_ADDIN, tree_addin_iface_init))
+ G_IMPLEMENT_INTERFACE (IDE_TYPE_TREE_ADDIN, tree_addin_iface_init))
static void
gbp_grep_tree_addin_class_init (GbpGrepTreeAddinClass *klass)
diff --git a/src/plugins/grep/gbp-grep-workspace-addin.c b/src/plugins/grep/gbp-grep-workspace-addin.c
new file mode 100644
index 000000000..9d67044d3
--- /dev/null
+++ b/src/plugins/grep/gbp-grep-workspace-addin.c
@@ -0,0 +1,116 @@
+/* gbp-grep-workspace-addin.c
+ *
+ * Copyright 2018-2019 Christian Hergert <chergert redhat com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#define G_LOG_DOMAIN "gbp-grep-workspace-addin"
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include <libide-foundry.h>
+#include <libide-gui.h>
+
+#include "gbp-grep-workspace-addin.h"
+#include "gbp-grep-panel.h"
+
+#define I_(s) g_intern_static_string(s)
+
+struct _GbpGrepWorkspaceAddin
+{
+ GObject parent_instance;
+ GtkWidget *panel;
+};
+
+static void
+gbp_grep_workspace_page_addin_show_project_panel_action (GSimpleAction *action,
+ GVariant *variant,
+ gpointer user_data)
+{
+ GbpGrepWorkspaceAddin *self = GBP_GREP_WORKSPACE_ADDIN (user_data);
+
+ g_assert (GBP_IS_GREP_WORKSPACE_ADDIN (self));
+
+ panel_widget_raise (PANEL_WIDGET (self->panel));
+}
+
+static const GActionEntry actions[] = {
+ { "show-project-panel", gbp_grep_workspace_page_addin_show_project_panel_action },
+};
+
+static void
+gbp_grep_workspace_addin_load (IdeWorkspaceAddin *addin,
+ IdeWorkspace *workspace)
+{
+ GbpGrepWorkspaceAddin *self = (GbpGrepWorkspaceAddin *)addin;
+ g_autoptr(GSimpleActionGroup) group = NULL;
+ g_autoptr(IdePanelPosition) position = NULL;
+
+ g_assert (GBP_IS_GREP_WORKSPACE_ADDIN (self));
+ g_assert (IDE_IS_WORKSPACE (workspace));
+
+ self->panel = gbp_grep_panel_new ();
+
+ position = ide_panel_position_new ();
+ ide_panel_position_set_edge (position, PANEL_DOCK_POSITION_BOTTOM);
+ ide_workspace_add_pane (workspace, IDE_PANE (self->panel), position);
+
+ group = g_simple_action_group_new ();
+ g_action_map_add_action_entries (G_ACTION_MAP (group),
+ actions,
+ G_N_ELEMENTS (actions),
+ self);
+ gtk_widget_insert_action_group (GTK_WIDGET (workspace),
+ "grep",
+ G_ACTION_GROUP (group));
+}
+
+static void
+gbp_grep_workspace_addin_unload (IdeWorkspaceAddin *addin,
+ IdeWorkspace *workspace)
+{
+ GbpGrepWorkspaceAddin *self = (GbpGrepWorkspaceAddin *)addin;
+
+ g_assert (IDE_IS_MAIN_THREAD ());
+ g_assert (GBP_IS_GREP_WORKSPACE_ADDIN (self));
+
+ gtk_widget_insert_action_group (GTK_WIDGET (workspace), "grep", NULL);
+
+ g_clear_pointer ((IdePane **)&self->panel, ide_pane_destroy);
+}
+
+static void
+workspace_addin_iface_init (IdeWorkspaceAddinInterface *iface)
+{
+ iface->load = gbp_grep_workspace_addin_load;
+ iface->unload = gbp_grep_workspace_addin_unload;
+}
+
+G_DEFINE_TYPE_WITH_CODE (GbpGrepWorkspaceAddin, gbp_grep_workspace_addin, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (IDE_TYPE_WORKSPACE_ADDIN, workspace_addin_iface_init))
+
+static void
+gbp_grep_workspace_addin_class_init (GbpGrepWorkspaceAddinClass *klass)
+{
+}
+
+static void
+gbp_grep_workspace_addin_init (GbpGrepWorkspaceAddin *self)
+{
+}
diff --git a/src/plugins/grep/gbp-grep-editor-addin.h b/src/plugins/grep/gbp-grep-workspace-addin.h
similarity index 79%
rename from src/plugins/grep/gbp-grep-editor-addin.h
rename to src/plugins/grep/gbp-grep-workspace-addin.h
index 152273203..e929c955c 100644
--- a/src/plugins/grep/gbp-grep-editor-addin.h
+++ b/src/plugins/grep/gbp-grep-workspace-addin.h
@@ -1,4 +1,4 @@
-/* gbp-grep-editor-addin.h
+/* gbp-grep-workspace-addin.h
*
* Copyright 2018-2019 Christian Hergert <chergert redhat com>
*
@@ -24,8 +24,8 @@
G_BEGIN_DECLS
-#define GBP_TYPE_GREP_EDITOR_ADDIN (gbp_grep_editor_addin_get_type())
+#define GBP_TYPE_GREP_WORKSPACE_ADDIN (gbp_grep_workspace_addin_get_type())
-G_DECLARE_FINAL_TYPE (GbpGrepEditorAddin, gbp_grep_editor_addin, GBP, GREP_EDITOR_ADDIN, GObject)
+G_DECLARE_FINAL_TYPE (GbpGrepWorkspaceAddin, gbp_grep_workspace_addin, GBP, GREP_WORKSPACE_ADDIN, GObject)
G_END_DECLS
diff --git a/src/plugins/grep/grep-plugin.c b/src/plugins/grep/grep-plugin.c
index 71dfcb95f..a9d8ad30e 100644
--- a/src/plugins/grep/grep-plugin.c
+++ b/src/plugins/grep/grep-plugin.c
@@ -20,12 +20,13 @@
#include "config.h"
+#include <libpeas/peas.h>
+
#include <libide-tree.h>
#include <libide-editor.h>
-#include <libpeas/peas.h>
#include "gbp-grep-tree-addin.h"
-#include "gbp-grep-editor-addin.h"
+#include "gbp-grep-workspace-addin.h"
_IDE_EXTERN void
_gbp_grep_register_types (PeasObjectModule *module)
@@ -34,6 +35,6 @@ _gbp_grep_register_types (PeasObjectModule *module)
IDE_TYPE_TREE_ADDIN,
GBP_TYPE_GREP_TREE_ADDIN);
peas_object_module_register_extension_type (module,
- IDE_TYPE_EDITOR_ADDIN,
- GBP_TYPE_GREP_EDITOR_ADDIN);
+ IDE_TYPE_WORKSPACE_ADDIN,
+ GBP_TYPE_GREP_WORKSPACE_ADDIN);
}
diff --git a/src/plugins/grep/grep.plugin b/src/plugins/grep/grep.plugin
index d3c3e63c4..cbd6a3e6c 100644
--- a/src/plugins/grep/grep.plugin
+++ b/src/plugins/grep/grep.plugin
@@ -2,9 +2,10 @@
Authors=Christian Hergert <christian hergert me>
Builtin=true
Copyright=Copyright © 2018 Christian Hergert
-Depends=editor;project-tree;
+Depends=project-tree;
Description=Search across project files
Embedded=_gbp_grep_register_types
Module=grep
Name=Find in Files
X-Tree-Kind=project-tree;
+X-Workspace-Kind=editor;primary;
diff --git a/src/plugins/grep/gtk/menus.ui b/src/plugins/grep/gtk/menus.ui
index c035a1acb..cb0993bb3 100644
--- a/src/plugins/grep/gtk/menus.ui
+++ b/src/plugins/grep/gtk/menus.ui
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<interface>
<menu id="project-tree-menu">
- <section id="project-tree-menu-placeholder2">
+ <section id="project-tree-menu-find-section">
<item>
<attribute name="hidden-when">action-disabled</attribute>
<attribute name="label" translatable="yes">_Find in Files</attribute>
diff --git a/src/plugins/grep/meson.build b/src/plugins/grep/meson.build
index 54a1e1f9b..1279411ae 100644
--- a/src/plugins/grep/meson.build
+++ b/src/plugins/grep/meson.build
@@ -5,7 +5,7 @@ plugins_sources += files([
'gbp-grep-panel.c',
'gbp-grep-popover.c',
'gbp-grep-tree-addin.c',
- 'gbp-grep-editor-addin.c',
+ 'gbp-grep-workspace-addin.c',
'grep-plugin.c',
])
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]