~riaguzov/xpad/add_search

« back to all changes in this revision

Viewing changes to src/xpad-pad.c

  • Committer: Siergiej Riaguzow
  • Date: 2019-01-28 22:37:44 UTC
  • Revision ID: siergiej.riaguzow@gmail.com-20190128223744-v5g4flcd1574vat9
Add search via toolbar/context menu/Ctrl-F shortcut

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
 
3
3
Copyright (c) 2001-2007 Michael Terry
4
4
Copyright (c) 2009 Paul Ivanov
5
 
Copyright (c) 2011 Sergei Riaguzov
6
5
Copyright (c) 2011 Dennis Hilmar
7
6
Copyright (c) 2011 OBATA Akio
8
7
Copyright (c) 2013-2015 Arthur Borsboom
 
8
Copyright (c) 2019 Siergiej Riaguzow
9
9
 
10
10
This program is free software; you can redistribute it and/or modify
11
11
it under the terms of the GNU General Public License as published by
34
34
#include "xpad-pad-properties.h"
35
35
#include "xpad-periodic.h"
36
36
#include "xpad-preferences.h"
 
37
#include "xpad-search-bar.h"
37
38
#include "xpad-text-buffer.h"
38
39
#include "xpad-text-view.h"
39
40
#include "xpad-toolbar.h"
52
53
        gboolean sticky;
53
54
 
54
55
        /* selected child widgets */
 
56
        GtkOverlay *text_with_search_overlay;
 
57
        // TODO: Why everything is a GtkWidget? declare as proper child types for readability
 
58
        // see long comment in xpad-toolbar.h. Even if class creators may return GtkWidget*
 
59
        // what is the point of storing them as such. This deastrically reduces readability
55
60
        GtkWidget *textview;
56
61
        GtkWidget *scrollbar;
 
62
        XpadSearchBar *searchbar;
57
63
 
58
64
        /* toolbar stuff */
59
65
        GtkWidget *toolbar;
128
134
static void xpad_pad_popup (XpadPad *pad, GdkEventButton *event);
129
135
static void xpad_pad_spawn (XpadPad *pad);
130
136
static void xpad_pad_clear (XpadPad *pad);
 
137
static void xpad_pad_search (XpadPad *pad);
131
138
static void xpad_pad_undo (XpadPad *pad);
132
139
static void xpad_pad_redo (XpadPad *pad);
133
140
static void xpad_pad_cut (XpadPad *pad);
289
296
        pad->priv->location_valid = FALSE;
290
297
        pad->priv->infoname = NULL;
291
298
        pad->priv->contentname = NULL;
 
299
        pad->priv->text_with_search_overlay = NULL;
292
300
        pad->priv->textview = NULL;
293
301
        pad->priv->scrollbar = NULL;
 
302
        pad->priv->searchbar = NULL;
294
303
        pad->priv->toolbar = NULL;
295
304
        pad->priv->toolbar_timeout = 0;
296
305
        pad->priv->toolbar_height = 0;
306
315
        XpadPad *pad = XPAD_PAD (object);
307
316
 
308
317
        gboolean decorations, hide_from_taskbar, hide_from_task_switcher;
309
 
        GtkBox *vbox;
310
318
 
311
319
        g_object_get (pad->priv->settings,
312
320
                        "width", &pad->priv->width,
315
323
 
316
324
        GtkWindow *pad_window = GTK_WINDOW (pad);
317
325
 
 
326
        // textview in scrollbar
318
327
        pad->priv->textview = GTK_WIDGET (XPAD_TEXT_VIEW (xpad_text_view_new (pad->priv->settings, pad)));
319
328
 
320
329
        pad->priv->scrollbar = GTK_WIDGET (g_object_new (GTK_TYPE_SCROLLED_WINDOW,
326
335
                "child", pad->priv->textview,
327
336
                NULL));
328
337
 
 
338
        // searchbar
 
339
        GtkSourceBuffer *buffer = GTK_SOURCE_BUFFER (gtk_text_view_get_buffer (GTK_TEXT_VIEW (pad->priv->textview)));
 
340
        pad->priv->searchbar = xpad_search_bar_new (buffer);
 
341
 
 
342
        // overlay with scrollbar (with text) and searchbar
 
343
        pad->priv->text_with_search_overlay = GTK_OVERLAY (gtk_overlay_new ());
 
344
        gtk_overlay_add_overlay (pad->priv->text_with_search_overlay, pad->priv->scrollbar);
 
345
        gtk_overlay_add_overlay (pad->priv->text_with_search_overlay, GTK_WIDGET (pad->priv->searchbar));
 
346
 
 
347
        // toolbar
329
348
        pad->priv->toolbar = GTK_WIDGET (xpad_toolbar_new (pad));
330
349
 
331
350
        pad->priv->accel_group = gtk_accel_group_new ();
334
353
        pad->priv->highlight_menu = menu_get_popup_highlight (pad, pad->priv->accel_group);
335
354
        gtk_accel_group_connect (pad->priv->accel_group, GDK_KEY_Q, GDK_CONTROL_MASK, 0, g_cclosure_new_swap (G_CALLBACK (xpad_app_quit), pad, NULL));
336
355
 
337
 
        vbox = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 0));
 
356
        // GtkBox with overlay and toolbar
 
357
        GtkBox *vbox = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 0));
338
358
        gtk_box_set_homogeneous (vbox, FALSE);
339
 
        gtk_box_pack_start (vbox, pad->priv->scrollbar, TRUE, TRUE, 0);
 
359
        gtk_box_pack_start (vbox, GTK_WIDGET (pad->priv->text_with_search_overlay), TRUE, TRUE, 0);
340
360
        gtk_box_pack_start (vbox, pad->priv->toolbar, FALSE, FALSE, 0);
341
361
 
342
362
        gtk_container_child_set (GTK_CONTAINER (vbox), pad->priv->toolbar, "expand", FALSE, NULL);
404
424
        g_signal_connect_swapped (pad->priv->toolbar, "activate-cut", G_CALLBACK (xpad_pad_cut), pad);
405
425
        g_signal_connect_swapped (pad->priv->toolbar, "activate-copy", G_CALLBACK (xpad_pad_copy), pad);
406
426
        g_signal_connect_swapped (pad->priv->toolbar, "activate-paste", G_CALLBACK (xpad_pad_paste), pad);
 
427
        g_signal_connect_swapped (pad->priv->toolbar, "activate-search", G_CALLBACK (xpad_pad_search), pad);
407
428
        g_signal_connect_swapped (pad->priv->toolbar, "activate-delete", G_CALLBACK (xpad_pad_delete), pad);
408
429
        g_signal_connect_swapped (pad->priv->toolbar, "activate-properties", G_CALLBACK (xpad_pad_open_properties), pad);
409
430
        g_signal_connect_swapped (pad->priv->toolbar, "activate-preferences", G_CALLBACK (xpad_pad_open_preferences), pad);
845
866
}
846
867
 
847
868
void
 
869
xpad_pad_search (XpadPad *pad)
 
870
{
 
871
        xpad_search_bar_show (pad->priv->searchbar);
 
872
}
 
873
 
 
874
void
848
875
xpad_pad_toggle(XpadPad *pad)
849
876
{
850
877
         if (gtk_widget_get_visible (GTK_WIDGET(pad)))
1609
1636
        MENU_ADD (_("_Paste"), "edit-paste", 0, 0, xpad_pad_paste);
1610
1637
        g_object_set_data (G_OBJECT (uppermenu), "paste", item);
1611
1638
        MENU_ADD_SEP();
 
1639
        MENU_ADD (_("_Find"), "edit-find", GDK_KEY_F, GDK_CONTROL_MASK, xpad_pad_search);
 
1640
        MENU_ADD_SEP();
1612
1641
        MENU_ADD (_("_Layout"), "document-properties", 0, 0, xpad_pad_open_properties);
1613
1642
 
1614
1643
        menu = uppermenu;