diff options
author | mbkma <[email protected]> | 2020-04-12 14:48:20 +0200 |
---|---|---|
committer | ZenWalker <[email protected]> | 2020-07-31 16:04:16 +0200 |
commit | 3c2bf1aef96a7a94c58d9e99ac12a0d8cd788259 (patch) | |
tree | 025d856758c59d3b8d5dbea1dacad8da5a72c0d5 /pluma/pluma-tab.c | |
parent | 2edb465b646f671f3372c70f020bd3d3076e86ad (diff) | |
download | pluma-3c2bf1aef96a7a94c58d9e99ac12a0d8cd788259.tar.bz2 pluma-3c2bf1aef96a7a94c58d9e99ac12a0d8cd788259.tar.xz |
add overview map
Diffstat (limited to 'pluma/pluma-tab.c')
-rw-r--r-- | pluma/pluma-tab.c | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/pluma/pluma-tab.c b/pluma/pluma-tab.c index 9b1f6080..2b096568 100644 --- a/pluma/pluma-tab.c +++ b/pluma/pluma-tab.c @@ -52,8 +52,10 @@ struct _PlumaTabPrivate GSettings *editor_settings; PlumaTabState state; + GtkWidget *overlay; GtkWidget *view; GtkWidget *view_scrolled_window; + GtkWidget *view_map_frame; GtkWidget *message_area; GtkWidget *print_preview; @@ -406,11 +408,15 @@ pluma_tab_set_state (PlumaTab *tab, (state == PLUMA_TAB_STATE_SHOWING_PRINT_PREVIEW)) { gtk_widget_hide (tab->priv->view_scrolled_window); + gtk_widget_hide (tab->priv->overlay); } else { if (tab->priv->print_preview == NULL) + { gtk_widget_show (tab->priv->view_scrolled_window); + gtk_widget_show (tab->priv->overlay); + } } set_cursor_according_to_state (GTK_TEXT_VIEW (tab->priv->view), @@ -1489,6 +1495,8 @@ tab_mount_operation_factory (PlumaDocument *doc, static void pluma_tab_init (PlumaTab *tab) { + GtkWidget *hbox; + GtkWidget *map; GtkWidget *sw; PlumaDocument *doc; PlumaLockdownMask lockdown; @@ -1546,12 +1554,46 @@ pluma_tab_init (PlumaTab *tab) gtk_widget_show (tab->priv->view); g_object_set_data (G_OBJECT (tab->priv->view), PLUMA_TAB_KEY, tab); - gtk_box_pack_end (GTK_BOX (tab), sw, TRUE, TRUE, 0); gtk_container_add (GTK_CONTAINER (sw), tab->priv->view); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN); gtk_widget_show (sw); + /* Create the minimap overlay */ + tab->priv->overlay = gtk_overlay_new (); + tab->priv->view_map_frame = gtk_frame_new (NULL); + map = gtk_source_map_new(); + + GtkCssProvider *provider = gtk_css_provider_new (); + gtk_css_provider_load_from_data (provider, + "textview { font-family: Monospace; font-size: 1pt; }", + -1, + NULL); + gtk_style_context_add_provider (gtk_widget_get_style_context (map), + GTK_STYLE_PROVIDER (provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + g_object_unref (provider); + + gtk_source_map_set_view (GTK_SOURCE_MAP(map), GTK_SOURCE_VIEW(tab->priv->view)); + gtk_container_add (GTK_CONTAINER(tab->priv->view_map_frame), map); + gtk_widget_show (tab->priv->view_map_frame); + + /* Start packing */ + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_pack_start (GTK_BOX (hbox), sw, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), tab->priv->view_map_frame, FALSE, FALSE, 0); + gtk_container_add (GTK_CONTAINER(tab->priv->overlay), hbox); + gtk_box_pack_end (GTK_BOX (tab), tab->priv->overlay, TRUE, TRUE, 0); + + gtk_widget_show (hbox); + gtk_widget_show (tab->priv->overlay); + + g_settings_bind (tab->priv->editor_settings, + PLUMA_SETTINGS_DISPLAY_OVERVIEW_MAP, + tab->priv->view_map_frame, + "visible", + G_SETTINGS_BIND_GET | G_SETTINGS_BIND_NO_SENSITIVITY); + g_signal_connect (doc, "notify::uri", G_CALLBACK (document_uri_notify_handler), |