[gedit] Add a switch-tab signal in the multi-notebook
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit] Add a switch-tab signal in the multi-notebook
- Date: Thu, 3 Jun 2010 12:41:25 +0000 (UTC)
commit f9f9fefe71eeaf5f95cba98e6cea236e39622663
Author: Ignacio Casal Quinteiro <icq gnome org>
Date: Thu Jun 3 14:40:58 2010 +0200
Add a switch-tab signal in the multi-notebook
gedit/gedit-multi-notebook.c | 26 +++++++++++++--
gedit/gedit-multi-notebook.h | 3 ++
gedit/gedit-window-private.h | 2 -
gedit/gedit-window.c | 72 +++++++++++++++++++++++------------------
4 files changed, 65 insertions(+), 38 deletions(-)
---
diff --git a/gedit/gedit-multi-notebook.c b/gedit/gedit-multi-notebook.c
index c5fd421..b79ecbf 100644
--- a/gedit/gedit-multi-notebook.c
+++ b/gedit/gedit-multi-notebook.c
@@ -52,6 +52,7 @@ enum
NOTEBOOK_REMOVED,
TAB_ADDED,
TAB_REMOVED,
+ SWITCH_TAB,
TAB_CLOSE_REQUEST,
TAB_DETACHED,
TABS_REORDERED,
@@ -152,6 +153,17 @@ gedit_multi_notebook_class_init (GeditMultiNotebookClass *klass)
2,
GEDIT_TYPE_NOTEBOOK,
GEDIT_TYPE_TAB);
+ signals[SWITCH_TAB] =
+ g_signal_new ("switch-tab",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GeditMultiNotebookClass, switch_tab),
+ NULL, NULL,
+ gedit_marshal_VOID__OBJECT_OBJECT,
+ G_TYPE_NONE,
+ 2,
+ GEDIT_TYPE_TAB,
+ GEDIT_TYPE_TAB);
signals[TAB_CLOSE_REQUEST] =
g_signal_new ("tab-close-request",
G_OBJECT_CLASS_TYPE (object_class),
@@ -302,19 +314,25 @@ static void
notebook_switch_page (GtkNotebook *book,
GtkNotebookPage *pg,
gint page_num,
- GeditMultiNotebook *multi)
+ GeditMultiNotebook *mnb)
{
GeditTab *tab;
/* CHECK: I don't know why but it seems notebook_switch_page is called
two times every time the user change the active tab */
tab = GEDIT_TAB (gtk_notebook_get_nth_page (book, page_num));
- if (tab != multi->priv->active_tab)
+ if (tab != mnb->priv->active_tab)
{
+ GeditTab *old_tab;
+
+ old_tab = mnb->priv->active_tab;
+
/* set the active tab */
- multi->priv->active_tab = tab;
+ mnb->priv->active_tab = tab;
- g_object_notify (G_OBJECT (multi), "active-tab");
+ g_object_notify (G_OBJECT (mnb), "active-tab");
+
+ g_signal_emit (G_OBJECT (mnb), signals[SWITCH_TAB], 0, old_tab, tab);
}
}
diff --git a/gedit/gedit-multi-notebook.h b/gedit/gedit-multi-notebook.h
index 0d12c18..35ce1f9 100644
--- a/gedit/gedit-multi-notebook.h
+++ b/gedit/gedit-multi-notebook.h
@@ -65,6 +65,9 @@ struct _GeditMultiNotebookClass
void (* tab_removed) (GeditMultiNotebook *mnb,
GeditNotebook *notebook,
GeditTab *tab);
+ void (* switch_tab) (GeditMultiNotebook *mnb,
+ GeditTab *old_tab,
+ GeditTab *new_tab);
void (* tab_close_request) (GeditMultiNotebook *mnb,
GeditNotebook *notebook,
GeditTab *tab);
diff --git a/gedit/gedit-window-private.h b/gedit/gedit-window-private.h
index 368622d..9f02055 100644
--- a/gedit/gedit-window-private.h
+++ b/gedit/gedit-window-private.h
@@ -99,8 +99,6 @@ struct _GeditWindowPrivate
guint recents_menu_ui_id;
gulong recents_handler_id;
- GeditTab *active_tab;
-
gint num_tabs_with_error;
gint width;
diff --git a/gedit/gedit-window.c b/gedit/gedit-window.c
index d923f8e..d60473b 100644
--- a/gedit/gedit-window.c
+++ b/gedit/gedit-window.c
@@ -725,18 +725,21 @@ received_clipboard_contents (GtkClipboard *clipboard,
GtkSelectionData *selection_data,
GeditWindow *window)
{
+ GeditTab *tab;
gboolean sens;
GtkAction *action;
/* getting clipboard contents is async, so we need to
* get the current tab and its state */
- if (window->priv->active_tab != NULL)
+ tab = gedit_window_get_active_tab (window);
+
+ if (tab != NULL)
{
GeditTabState state;
gboolean state_normal;
- state = gedit_tab_get_state (window->priv->active_tab);
+ state = gedit_tab_get_state (tab);
state_normal = (state == GEDIT_TAB_STATE_NORMAL);
sens = state_normal &&
@@ -1923,7 +1926,7 @@ update_documents_list_menu (GeditWindow *window)
GTK_UI_MANAGER_MENUITEM,
FALSE);
- if (GEDIT_TAB (tab) == p->active_tab)
+ if (GEDIT_TAB (tab) == gedit_window_get_active_tab (window))
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
g_object_unref (action);
@@ -2367,13 +2370,16 @@ update_overwrite_mode_statusbar (GtkTextView *view,
static void
set_title (GeditWindow *window)
{
+ GeditTab *tab;
GeditDocument *doc = NULL;
gchar *name;
gchar *dirname = NULL;
gchar *title = NULL;
gint len;
- if (window->priv->active_tab == NULL)
+ tab = gedit_window_get_active_tab (window);
+
+ if (tab == NULL)
{
gedit_app_set_window_title (gedit_app_get_default (),
window,
@@ -2381,7 +2387,7 @@ set_title (GeditWindow *window)
return;
}
- doc = gedit_tab_get_document (window->priv->active_tab);
+ doc = gedit_tab_get_document (tab);
g_return_if_fail (doc != NULL);
name = gedit_document_get_short_name_for_display (doc);
@@ -2609,18 +2615,19 @@ language_changed (GObject *object,
}
static void
-active_tab_changed (GeditMultiNotebook *multi,
- GParamSpec *pspec,
- GeditWindow *window)
+tab_switched (GeditMultiNotebook *mnb,
+ GeditTab *old_tab,
+ GeditTab *new_tab,
+ GeditWindow *window)
{
GeditDocument *doc;
GeditView *view;
- if (window->priv->active_tab)
+ if (old_tab)
{
if (window->priv->tab_width_id)
{
- g_signal_handler_disconnect (gedit_tab_get_view (window->priv->active_tab),
+ g_signal_handler_disconnect (gedit_tab_get_view (old_tab),
window->priv->tab_width_id);
window->priv->tab_width_id = 0;
@@ -2628,7 +2635,7 @@ active_tab_changed (GeditMultiNotebook *multi,
if (window->priv->spaces_instead_of_tabs_id)
{
- g_signal_handler_disconnect (gedit_tab_get_view (window->priv->active_tab),
+ g_signal_handler_disconnect (gedit_tab_get_view (old_tab),
window->priv->spaces_instead_of_tabs_id);
window->priv->spaces_instead_of_tabs_id = 0;
@@ -2636,30 +2643,27 @@ active_tab_changed (GeditMultiNotebook *multi,
if (window->priv->language_changed_id)
{
- g_signal_handler_disconnect (gedit_tab_get_document (window->priv->active_tab),
+ g_signal_handler_disconnect (gedit_tab_get_document (old_tab),
window->priv->language_changed_id);
window->priv->language_changed_id = 0;
}
}
-
- /* set the active tab */
- window->priv->active_tab = gedit_multi_notebook_get_active_tab (multi);
- if (window->priv->active_tab == NULL || window->priv->dispose_has_run)
+ if (new_tab == NULL || window->priv->dispose_has_run)
return;
set_title (window);
- set_sensitivity_according_to_tab (window, window->priv->active_tab);
+ set_sensitivity_according_to_tab (window, new_tab);
/* activate the right item in the documents menu */
- activate_documents_list_item (window, window->priv->active_tab);
+ activate_documents_list_item (window, new_tab);
/* update the syntax menu */
update_languages_menu (window);
- view = gedit_tab_get_view (window->priv->active_tab);
- doc = gedit_tab_get_document (window->priv->active_tab);
+ view = gedit_tab_get_view (new_tab);
+ doc = gedit_tab_get_document (new_tab);
/* sync the statusbar */
update_cursor_position_statusbar (GTK_TEXT_BUFFER (doc),
@@ -2693,7 +2697,7 @@ active_tab_changed (GeditMultiNotebook *multi,
g_signal_emit (G_OBJECT (window),
signals[ACTIVE_TAB_CHANGED],
0,
- window->priv->active_tab);
+ new_tab);
}
static void
@@ -2934,7 +2938,7 @@ sync_state (GeditTab *tab,
update_window_state (window);
- if (tab != window->priv->active_tab)
+ if (tab != gedit_window_get_active_tab (window))
return;
set_sensitivity_according_to_tab (window, tab);
@@ -3407,9 +3411,10 @@ readonly_changed (GeditDocument *doc,
GParamSpec *pspec,
GeditWindow *window)
{
- set_sensitivity_according_to_tab (window, window->priv->active_tab);
+ set_sensitivity_according_to_tab (window,
+ gedit_window_get_active_tab (window));
- sync_name (window->priv->active_tab, NULL, window);
+ sync_name (gedit_window_get_active_tab (window), NULL, window);
gedit_plugins_engine_update_plugins_ui (gedit_plugins_engine_get_default (),
window);
@@ -3875,9 +3880,9 @@ bottom_panel_visibility_changed (GeditPanel *bottom_panel,
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), visible);
/* focus the document */
- if (!visible && window->priv->active_tab != NULL)
+ if (!visible)
{
- gtk_widget_grab_focus (GTK_WIDGET (window->priv->active_tab));
+ gtk_widget_grab_focus (GTK_WIDGET (window->priv->multi_notebook));
}
}
@@ -4081,7 +4086,6 @@ gedit_window_init (GeditWindow *window)
gedit_debug (DEBUG_WINDOW);
window->priv = GEDIT_WINDOW_GET_PRIVATE (window);
- window->priv->active_tab = NULL;
window->priv->removing_tabs = FALSE;
window->priv->state = GEDIT_WINDOW_STATE_NORMAL;
window->priv->dispose_has_run = FALSE;
@@ -4145,8 +4149,8 @@ gedit_window_init (GeditWindow *window)
window);
g_signal_connect (window->priv->multi_notebook,
- "notify::active-tab",
- G_CALLBACK (active_tab_changed),
+ "switch-tab",
+ G_CALLBACK (tab_switched),
window);
g_signal_connect (window->priv->multi_notebook,
@@ -4268,14 +4272,17 @@ gedit_window_init (GeditWindow *window)
GeditView *
gedit_window_get_active_view (GeditWindow *window)
{
+ GeditTab *tab;
GeditView *view;
g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
- if (window->priv->active_tab == NULL)
+ tab = gedit_window_get_active_tab (window);
+
+ if (tab == NULL)
return NULL;
- view = gedit_tab_get_view (GEDIT_TAB (window->priv->active_tab));
+ view = gedit_tab_get_view (tab);
return view;
}
@@ -4439,7 +4446,8 @@ gedit_window_get_active_tab (GeditWindow *window)
{
g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
- return gedit_multi_notebook_get_active_tab (window->priv->multi_notebook);
+ return (window->priv->multi_notebook == NULL) ? NULL :
+ gedit_multi_notebook_get_active_tab (window->priv->multi_notebook);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]