diff options
author | Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk> | 2011-07-02 00:17:53 +0800 |
---|---|---|
committer | Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk> | 2011-07-04 19:43:09 +0800 |
commit | abbbbdaed8530a61d99ca49ca8a33878dd24eda2 (patch) | |
tree | 60787ee29c295127dc14c95f34a4b673ea32fc82 | |
parent | 3b221ab08d6798c6d91d48332921fab8c3e7790e (diff) | |
download | gsoc2013-empathy-abbbbdaed8530a61d99ca49ca8a33878dd24eda2.tar gsoc2013-empathy-abbbbdaed8530a61d99ca49ca8a33878dd24eda2.tar.gz gsoc2013-empathy-abbbbdaed8530a61d99ca49ca8a33878dd24eda2.tar.bz2 gsoc2013-empathy-abbbbdaed8530a61d99ca49ca8a33878dd24eda2.tar.lz gsoc2013-empathy-abbbbdaed8530a61d99ca49ca8a33878dd24eda2.tar.xz gsoc2013-empathy-abbbbdaed8530a61d99ca49ca8a33878dd24eda2.tar.zst gsoc2013-empathy-abbbbdaed8530a61d99ca49ca8a33878dd24eda2.zip |
LogWindow: make it a proper GtkWindow subclass
And a proper singleton while at it.
https://bugzilla.gnome.org/show_bug.cgi?id=653803
-rw-r--r-- | libempathy-gtk/empathy-log-window.c | 666 | ||||
-rw-r--r-- | libempathy-gtk/empathy-log-window.h | 25 | ||||
-rw-r--r-- | libempathy-gtk/empathy-log-window.ui | 528 |
3 files changed, 645 insertions, 574 deletions
diff --git a/libempathy-gtk/empathy-log-window.c b/libempathy-gtk/empathy-log-window.c index bc1eb41d6..72b361cf4 100644 --- a/libempathy-gtk/empathy-log-window.c +++ b/libempathy-gtk/empathy-log-window.c @@ -60,9 +60,11 @@ #define DEBUG_FLAG EMPATHY_DEBUG_OTHER #include <libempathy/empathy-debug.h> -typedef struct +G_DEFINE_TYPE (EmpathyLogWindow, empathy_log_window, GTK_TYPE_WINDOW); + +struct _EmpathyLogWindowPriv { - GtkWidget *window; + GtkWidget *vbox; GtkWidget *button_profile; GtkWidget *button_chat; @@ -104,32 +106,30 @@ typedef struct TpAccount *selected_account; gchar *selected_chat_id; gboolean selected_is_chatroom; -} EmpathyLogWindow; +}; -static void log_window_destroy_cb (GtkWidget *widget, - EmpathyLogWindow *window); static void log_window_search_entry_changed_cb (GtkWidget *entry, - EmpathyLogWindow *window); + EmpathyLogWindow *self); static void log_window_search_entry_activate_cb (GtkWidget *widget, - EmpathyLogWindow *window); + EmpathyLogWindow *self); static void log_window_search_entry_icon_pressed_cb (GtkEntry *entry, GtkEntryIconPosition icon_pos, GdkEvent *event, gpointer user_data); -static void log_window_who_populate (EmpathyLogWindow *window); -static void log_window_who_setup (EmpathyLogWindow *window); -static void log_window_when_setup (EmpathyLogWindow *window); -static void log_window_what_setup (EmpathyLogWindow *window); -static void log_window_events_setup (EmpathyLogWindow *window); +static void log_window_who_populate (EmpathyLogWindow *self); +static void log_window_who_setup (EmpathyLogWindow *self); +static void log_window_when_setup (EmpathyLogWindow *self); +static void log_window_what_setup (EmpathyLogWindow *self); +static void log_window_events_setup (EmpathyLogWindow *self); static void log_window_chats_accounts_changed_cb (GtkWidget *combobox, - EmpathyLogWindow *window); -static void log_window_chats_set_selected (EmpathyLogWindow *window); -static void log_window_chats_get_messages (EmpathyLogWindow *window, + EmpathyLogWindow *self); +static void log_window_chats_set_selected (EmpathyLogWindow *self); +static void log_window_chats_get_messages (EmpathyLogWindow *self, gboolean force_get_dates); static void log_window_when_changed_cb (GtkTreeSelection *selection, - EmpathyLogWindow *window); + EmpathyLogWindow *self); static void log_window_delete_menu_clicked_cb (GtkMenuItem *menuitem, - EmpathyLogWindow *window); + EmpathyLogWindow *self); static void start_spinner (void); static void @@ -218,7 +218,7 @@ static gboolean has_element; typedef struct { - EmpathyLogWindow *window; + EmpathyLogWindow *self; TpAccount *account; TplEntity *entity; GDate *date; @@ -228,7 +228,7 @@ typedef struct } Ctx; static Ctx * -ctx_new (EmpathyLogWindow *window, +ctx_new (EmpathyLogWindow *self, TpAccount *account, TplEntity *entity, GDate *date, @@ -238,7 +238,7 @@ ctx_new (EmpathyLogWindow *window, { Ctx *ctx = g_slice_new0 (Ctx); - ctx->window = window; + ctx->self = self; if (account != NULL) ctx->account = g_object_ref (account); if (entity != NULL) @@ -264,12 +264,12 @@ ctx_free (Ctx *ctx) static void account_chooser_ready_cb (EmpathyAccountChooser *chooser, - EmpathyLogWindow *window) + EmpathyLogWindow *self) { /* We'll display the account once the model has been populate with the chats * of this account. */ empathy_account_chooser_set_account (EMPATHY_ACCOUNT_CHOOSER ( - window->account_chooser), window->selected_account); + self->priv->account_chooser), self->priv->selected_account); } static void @@ -280,15 +280,15 @@ select_account_once_ready (EmpathyLogWindow *self, { EmpathyAccountChooser *account_chooser; - account_chooser = EMPATHY_ACCOUNT_CHOOSER (self->account_chooser); + account_chooser = EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser); - tp_clear_object (&self->selected_account); - self->selected_account = g_object_ref (account); + tp_clear_object (&self->priv->selected_account); + self->priv->selected_account = g_object_ref (account); - g_free (self->selected_chat_id); - self->selected_chat_id = g_strdup (chat_id); + g_free (self->priv->selected_chat_id); + self->priv->selected_chat_id = g_strdup (chat_id); - self->selected_is_chatroom = is_chatroom; + self->priv->selected_is_chatroom = is_chatroom; if (empathy_account_chooser_is_ready (account_chooser)) account_chooser_ready_cb (account_chooser, self); @@ -300,93 +300,157 @@ select_account_once_ready (EmpathyLogWindow *self, static void toolbutton_profile_clicked (GtkToolButton *toolbutton, - EmpathyLogWindow *window) + EmpathyLogWindow *self) { - g_return_if_fail (window != NULL); - g_return_if_fail (EMPATHY_IS_CONTACT (window->selected_contact)); + g_return_if_fail (self != NULL); + g_return_if_fail (EMPATHY_IS_CONTACT (self->priv->selected_contact)); - empathy_contact_information_dialog_show (window->selected_contact, - GTK_WINDOW (window->window)); + empathy_contact_information_dialog_show (self->priv->selected_contact, + GTK_WINDOW (self)); } static void toolbutton_chat_clicked (GtkToolButton *toolbutton, - EmpathyLogWindow *window) + EmpathyLogWindow *self) { - g_return_if_fail (window != NULL); - g_return_if_fail (EMPATHY_IS_CONTACT (window->selected_contact)); + g_return_if_fail (self != NULL); + g_return_if_fail (EMPATHY_IS_CONTACT (self->priv->selected_contact)); - empathy_chat_with_contact (window->selected_contact, + empathy_chat_with_contact (self->priv->selected_contact, gtk_get_current_event_time ()); } static void toolbutton_av_clicked (GtkToolButton *toolbutton, - EmpathyLogWindow *window) + EmpathyLogWindow *self) { gboolean video; - g_return_if_fail (window != NULL); - g_return_if_fail (EMPATHY_IS_CONTACT (window->selected_contact)); + g_return_if_fail (self != NULL); + g_return_if_fail (EMPATHY_IS_CONTACT (self->priv->selected_contact)); - video = (GTK_WIDGET (toolbutton) == window->button_video); + video = (GTK_WIDGET (toolbutton) == self->priv->button_video); empathy_call_new_with_streams ( - empathy_contact_get_id (window->selected_contact), - empathy_contact_get_account (window->selected_contact), + empathy_contact_get_id (self->priv->selected_contact), + empathy_contact_get_account (self->priv->selected_contact), TRUE, video, gtk_get_current_event_time ()); } -GtkWidget * -empathy_log_window_show (TpAccount *account, - const gchar *chat_id, - gboolean is_chatroom, - GtkWindow *parent) +static GObject * +empathy_log_window_constructor (GType type, + guint n_props, + GObjectConstructParam *props) { - EmpathyAccountChooser *account_chooser; - GtkBuilder *gui; - gchar *filename; - EmpathyLogWindow *window; - GtkWidget *vbox, *accounts, *search, *label, *quit; + GObject *retval; if (log_window != NULL) { - gtk_window_present (GTK_WINDOW (log_window->window)); + retval = (GObject *) log_window; + } + else + { + retval = G_OBJECT_CLASS (empathy_log_window_parent_class) + ->constructor (type, n_props, props); - if (account != NULL && chat_id != NULL) - select_account_once_ready (log_window, account, chat_id, is_chatroom); + log_window = EMPATHY_LOG_WINDOW (retval); + g_object_add_weak_pointer (retval, (gpointer) &log_window); + } + + return retval; +} - return log_window->window; +static void +empathy_log_window_dispose (GObject *object) +{ + EmpathyLogWindow *self = EMPATHY_LOG_WINDOW (object); + + if (self->priv->source != 0) + { + g_source_remove (self->priv->source); + self->priv->source = 0; + } + + if (self->priv->current_dates != NULL) + { + g_list_free_full (self->priv->current_dates, + (GDestroyNotify) g_date_free); + self->priv->current_dates = NULL; } - log_window = g_new0 (EmpathyLogWindow, 1); - log_window->chain = _tpl_action_chain_new_async (NULL, NULL, NULL); + tp_clear_pointer (&self->priv->chain, _tpl_action_chain_free); + + tp_clear_object (&self->priv->log_manager); + tp_clear_object (&self->priv->selected_account); + tp_clear_object (&self->priv->selected_contact); + + G_OBJECT_CLASS (empathy_log_window_parent_class)->dispose (object); +} + +static void +empathy_log_window_finalize (GObject *object) +{ + EmpathyLogWindow *self = EMPATHY_LOG_WINDOW (object); + + g_free (self->priv->last_find); + g_free (self->priv->selected_chat_id); + + G_OBJECT_CLASS (empathy_log_window_parent_class)->finalize (object); +} + +static void +empathy_log_window_class_init ( + EmpathyLogWindowClass *empathy_log_window_class) +{ + GObjectClass *object_class = G_OBJECT_CLASS (empathy_log_window_class); + + g_type_class_add_private (empathy_log_window_class, + sizeof (EmpathyLogWindowPriv)); + + object_class->constructor = empathy_log_window_constructor; + object_class->dispose = empathy_log_window_dispose; + object_class->finalize = empathy_log_window_finalize; +} - log_window->log_manager = tpl_log_manager_dup_singleton (); +static void +empathy_log_window_init (EmpathyLogWindow *self) +{ + EmpathyAccountChooser *account_chooser; + GtkBuilder *gui; + gchar *filename; + GtkWidget *vbox, *accounts, *search, *label, *quit; - window = log_window; + self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, + EMPATHY_TYPE_LOG_WINDOW, EmpathyLogWindowPriv); + + self->priv->chain = _tpl_action_chain_new_async (NULL, NULL, NULL); + + self->priv->log_manager = tpl_log_manager_dup_singleton (); + + gtk_window_set_title (GTK_WINDOW (self), _("History")); + gtk_widget_set_can_focus (GTK_WIDGET (self), FALSE); + gtk_window_set_default_size (GTK_WINDOW (self), 800, 600); filename = empathy_file_lookup ("empathy-log-window.ui", "libempathy-gtk"); gui = empathy_builder_get_file (filename, - "log_window", &window->window, - "toolbutton_profile", &window->button_profile, - "toolbutton_chat", &window->button_chat, - "toolbutton_call", &window->button_call, - "toolbutton_video", &window->button_video, + "vbox1", &self->priv->vbox, + "toolbutton_profile", &self->priv->button_profile, + "toolbutton_chat", &self->priv->button_chat, + "toolbutton_call", &self->priv->button_call, + "toolbutton_video", &self->priv->button_video, "toolbutton_accounts", &accounts, "toolbutton_search", &search, "imagemenuitem_quit", &quit, - "treeview_who", &window->treeview_who, - "treeview_what", &window->treeview_what, - "treeview_when", &window->treeview_when, - "treeview_events", &window->treeview_events, - "notebook", &window->notebook, - "spinner", &window->spinner, + "treeview_who", &self->priv->treeview_who, + "treeview_what", &self->priv->treeview_what, + "treeview_when", &self->priv->treeview_when, + "treeview_events", &self->priv->treeview_events, + "notebook", &self->priv->notebook, + "spinner", &self->priv->spinner, NULL); g_free (filename); - empathy_builder_connect (gui, window, - "log_window", "destroy", log_window_destroy_cb, + empathy_builder_connect (gui, self, "toolbutton_profile", "clicked", toolbutton_profile_clicked, "toolbutton_chat", "clicked", toolbutton_chat_clicked, "toolbutton_call", "clicked", toolbutton_av_clicked, @@ -394,32 +458,31 @@ empathy_log_window_show (TpAccount *account, "imagemenuitem_delete", "activate", log_window_delete_menu_clicked_cb, NULL); - g_object_unref (gui); + gtk_container_add (GTK_CONTAINER (self), self->priv->vbox); - g_object_add_weak_pointer (G_OBJECT (window->window), - (gpointer) &log_window); + g_object_unref (gui); g_signal_connect_swapped (quit, "activate", - G_CALLBACK (gtk_widget_destroy), window->window); + G_CALLBACK (gtk_widget_destroy), self); /* Account chooser for chats */ vbox = gtk_vbox_new (FALSE, 3); - window->account_chooser = empathy_account_chooser_new (); - account_chooser = EMPATHY_ACCOUNT_CHOOSER (window->account_chooser); + self->priv->account_chooser = empathy_account_chooser_new (); + account_chooser = EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser); empathy_account_chooser_set_has_all_option (account_chooser, TRUE); empathy_account_chooser_set_filter (account_chooser, empathy_account_chooser_filter_has_logs, NULL); empathy_account_chooser_set_all (account_chooser); - g_signal_connect (window->account_chooser, "changed", + g_signal_connect (self->priv->account_chooser, "changed", G_CALLBACK (log_window_chats_accounts_changed_cb), - window); + self); label = gtk_label_new (_("Show")); gtk_box_pack_start (GTK_BOX (vbox), - window->account_chooser, + self->priv->account_chooser, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), @@ -432,16 +495,16 @@ empathy_log_window_show (TpAccount *account, /* Search entry */ vbox = gtk_vbox_new (FALSE, 3); - window->search_entry = gtk_entry_new (); - gtk_entry_set_icon_from_stock (GTK_ENTRY (window->search_entry), + self->priv->search_entry = gtk_entry_new (); + gtk_entry_set_icon_from_stock (GTK_ENTRY (self->priv->search_entry), GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_FIND); - gtk_entry_set_icon_from_stock (GTK_ENTRY (window->search_entry), + gtk_entry_set_icon_from_stock (GTK_ENTRY (self->priv->search_entry), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CLEAR); label = gtk_label_new (_("Search")); gtk_box_pack_start (GTK_BOX (vbox), - window->search_entry, + self->priv->search_entry, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), @@ -451,57 +514,47 @@ empathy_log_window_show (TpAccount *account, gtk_widget_show_all (vbox); gtk_container_add (GTK_CONTAINER (search), vbox); - g_signal_connect (window->search_entry, "changed", + g_signal_connect (self->priv->search_entry, "changed", G_CALLBACK (log_window_search_entry_changed_cb), - window); + self); - g_signal_connect (window->search_entry, "activate", + g_signal_connect (self->priv->search_entry, "activate", G_CALLBACK (log_window_search_entry_activate_cb), - window); + self); - g_signal_connect (window->search_entry, "icon-press", + g_signal_connect (self->priv->search_entry, "icon-press", G_CALLBACK (log_window_search_entry_icon_pressed_cb), - window); + self); /* Contacts */ - log_window_events_setup (window); - log_window_who_setup (window); - log_window_what_setup (window); - log_window_when_setup (window); - - log_window_who_populate (window); + log_window_events_setup (self); + log_window_who_setup (self); + log_window_what_setup (self); + log_window_when_setup (self); - if (account != NULL && chat_id != NULL) - select_account_once_ready (window, account, chat_id, is_chatroom); + log_window_who_populate (self); - if (parent != NULL) - gtk_window_set_transient_for (GTK_WINDOW (window->window), - GTK_WINDOW (parent)); - - gtk_widget_show (window->window); - - return window->window; + gtk_widget_show (GTK_WIDGET (self)); } -static void -log_window_destroy_cb (GtkWidget *widget, - EmpathyLogWindow *window) +GtkWidget * +empathy_log_window_show (TpAccount *account, + const gchar *chat_id, + gboolean is_chatroom, + GtkWindow *parent) { - if (window->source != 0) - g_source_remove (window->source); + log_window = g_object_new (EMPATHY_TYPE_LOG_WINDOW, NULL); - g_free (window->last_find); - _tpl_action_chain_free (window->chain); - g_object_unref (window->log_manager); + gtk_window_present (GTK_WINDOW (log_window)); - if (window->current_dates != NULL) - g_list_free_full (window->current_dates, (GDestroyNotify) g_date_free); + if (account != NULL && chat_id != NULL) + select_account_once_ready (log_window, account, chat_id, is_chatroom); - tp_clear_object (&window->selected_account); - tp_clear_object (&window->selected_contact); - g_free (window->selected_chat_id); + if (parent != NULL) + gtk_window_set_transient_for (GTK_WINDOW (log_window), + GTK_WINDOW (parent)); - g_free (window); + return GTK_WIDGET (log_window); } static gboolean @@ -649,7 +702,7 @@ get_parent_iter_for_message (TplEvent *event, gboolean parent_found = FALSE; gboolean next; - store = log_window->store_events; + store = log_window->priv->store_events; model = GTK_TREE_MODEL (store); for (next = gtk_tree_model_get_iter_first (model, &iter); @@ -733,7 +786,7 @@ static void log_window_append_chat_message (TplEvent *event, EmpathyMessage *message) { - GtkTreeStore *store = log_window->store_events; + GtkTreeStore *store = log_window->priv->store_events; GtkTreeIter iter, parent; gchar *pretty_date, *alias, *body, *msg; GDateTime *date; @@ -750,12 +803,12 @@ log_window_append_chat_message (TplEvent *event, tpl_entity_get_alias (tpl_event_get_sender (event)), -1); /* If the user is searching, highlight the matched text */ - if (!EMP_STR_EMPTY (log_window->last_find)) + if (!EMP_STR_EMPTY (log_window->priv->last_find)) { - gchar *str = g_regex_escape_string (log_window->last_find, -1); + gchar *str = g_regex_escape_string (log_window->priv->last_find, -1); gchar *replacement = g_markup_printf_escaped ( "<span background=\"yellow\">%s</span>", - log_window->last_find); + log_window->priv->last_find); GError *error = NULL; GRegex *regex = g_regex_new (str, 0, 0, &error); @@ -827,7 +880,7 @@ log_window_append_call (TplEvent *event, EmpathyMessage *message) { TplCallEvent *call = TPL_CALL_EVENT (event); - GtkTreeStore *store = log_window->store_events; + GtkTreeStore *store = log_window->priv->store_events; GtkTreeIter iter, child; gchar *pretty_date, *duration, *finished; GDateTime *started_date, *finished_date; @@ -910,7 +963,7 @@ add_all_accounts_and_entities (GList **accounts, GtkTreeModel *model; GtkTreeIter iter; - view = GTK_TREE_VIEW (log_window->treeview_who); + view = GTK_TREE_VIEW (log_window->priv->treeview_who); model = gtk_tree_view_get_model (view); if (!gtk_tree_model_get_iter_first (model, &iter)) @@ -941,7 +994,7 @@ add_all_accounts_and_entities (GList **accounts, } static gboolean -log_window_get_selected (EmpathyLogWindow *window, +log_window_get_selected (EmpathyLogWindow *self, GList **accounts, GList **entities, GList **dates, @@ -957,7 +1010,7 @@ log_window_get_selected (EmpathyLogWindow *window, GList *paths, *l; gint type; - view = GTK_TREE_VIEW (window->treeview_who); + view = GTK_TREE_VIEW (self->priv->treeview_who); model = gtk_tree_view_get_model (view); selection = gtk_tree_view_get_selection (view); @@ -1001,7 +1054,7 @@ log_window_get_selected (EmpathyLogWindow *window, } g_list_free_full (paths, (GDestroyNotify) gtk_tree_path_free); - view = GTK_TREE_VIEW (window->treeview_what); + view = GTK_TREE_VIEW (self->priv->treeview_what); model = gtk_tree_view_get_model (view); selection = gtk_tree_view_get_selection (view); @@ -1023,7 +1076,7 @@ log_window_get_selected (EmpathyLogWindow *window, } g_list_free_full (paths, (GDestroyNotify) gtk_tree_path_free); - view = GTK_TREE_VIEW (window->treeview_when); + view = GTK_TREE_VIEW (self->priv->treeview_when); model = gtk_tree_view_get_model (view); selection = gtk_tree_view_get_selection (view); @@ -1128,7 +1181,7 @@ populate_events_from_search_hits (GList *accounts, if (g_list_find_custom (dates, anytime, (GCompareFunc) g_date_compare)) is_anytime = TRUE; - for (l = log_window->hits; l != NULL; l = l->next) + for (l = log_window->priv->hits; l != NULL; l = l->next) { TplLogSearchHit *hit = l->data; GList *acc, *targ; @@ -1160,14 +1213,14 @@ populate_events_from_search_hits (GList *accounts, Ctx *ctx; ctx = ctx_new (log_window, hit->account, hit->target, hit->date, - event_mask, subtype, log_window->count); - _tpl_action_chain_append (log_window->chain, + event_mask, subtype, log_window->priv->count); + _tpl_action_chain_append (log_window->priv->chain, get_events_for_date, ctx); } } start_spinner (); - _tpl_action_chain_start (log_window->chain); + _tpl_action_chain_start (log_window->priv->chain); g_date_free (anytime); } @@ -1236,12 +1289,12 @@ populate_dates_from_search_hits (GList *accounts, if (log_window == NULL) return; - view = GTK_TREE_VIEW (log_window->treeview_when); + view = GTK_TREE_VIEW (log_window->priv->treeview_when); model = gtk_tree_view_get_model (view); store = GTK_LIST_STORE (model); selection = gtk_tree_view_get_selection (view); - for (l = log_window->hits; l != NULL; l = l->next) + for (l = log_window->priv->hits; l != NULL; l = l->next) { TplLogSearchHit *hit = l->data; GList *acc, *targ; @@ -1312,16 +1365,16 @@ populate_entities_from_search_hits (void) GtkListStore *store; GList *l; - view = GTK_TREE_VIEW (log_window->treeview_who); + view = GTK_TREE_VIEW (log_window->priv->treeview_who); model = gtk_tree_view_get_model (view); store = GTK_LIST_STORE (model); gtk_list_store_clear (store); - account_chooser = EMPATHY_ACCOUNT_CHOOSER (log_window->account_chooser); + account_chooser = EMPATHY_ACCOUNT_CHOOSER (log_window->priv->account_chooser); account = empathy_account_chooser_get_account (account_chooser); - for (l = log_window->hits; l; l = l->next) + for (l = log_window->priv->hits; l; l = l->next) { TplLogSearchHit *hit = l->data; @@ -1393,12 +1446,12 @@ log_manager_searched_new_cb (GObject *manager, return; } - tp_clear_pointer (&log_window->hits, tpl_log_manager_search_free); - log_window->hits = hits; + tp_clear_pointer (&log_window->priv->hits, tpl_log_manager_search_free); + log_window->priv->hits = hits; populate_entities_from_search_hits (); - view = GTK_TREE_VIEW (log_window->treeview_when); + view = GTK_TREE_VIEW (log_window->priv->treeview_when); selection = gtk_tree_view_get_selection (view); g_signal_handlers_unblock_by_func (selection, @@ -1407,7 +1460,7 @@ log_manager_searched_new_cb (GObject *manager, } static void -log_window_find_populate (EmpathyLogWindow *window, +log_window_find_populate (EmpathyLogWindow *self, const gchar *search_criteria) { GtkTreeView *view; @@ -1415,15 +1468,15 @@ log_window_find_populate (EmpathyLogWindow *window, GtkTreeSelection *selection; GtkListStore *store; - gtk_tree_store_clear (window->store_events); + gtk_tree_store_clear (self->priv->store_events); - view = GTK_TREE_VIEW (window->treeview_who); + view = GTK_TREE_VIEW (self->priv->treeview_who); model = gtk_tree_view_get_model (view); store = GTK_LIST_STORE (model); gtk_list_store_clear (store); - view = GTK_TREE_VIEW (window->treeview_when); + view = GTK_TREE_VIEW (self->priv->treeview_when); model = gtk_tree_view_get_model (view); store = GTK_LIST_STORE (model); selection = gtk_tree_view_get_selection (view); @@ -1432,47 +1485,47 @@ log_window_find_populate (EmpathyLogWindow *window, if (EMP_STR_EMPTY (search_criteria)) { - tp_clear_pointer (&window->hits, tpl_log_manager_search_free); - log_window_who_populate (window); + tp_clear_pointer (&self->priv->hits, tpl_log_manager_search_free); + log_window_who_populate (self); return; } g_signal_handlers_block_by_func (selection, log_window_when_changed_cb, - window); + self); - tpl_log_manager_search_async (window->log_manager, + tpl_log_manager_search_async (self->priv->log_manager, search_criteria, TPL_EVENT_MASK_ANY, log_manager_searched_new_cb, NULL); } static gboolean -start_find_search (EmpathyLogWindow *window) +start_find_search (EmpathyLogWindow *self) { const gchar *str; - str = gtk_entry_get_text (GTK_ENTRY (window->search_entry)); + str = gtk_entry_get_text (GTK_ENTRY (self->priv->search_entry)); /* Don't find the same crap again */ - if (window->last_find && !tp_strdiff (window->last_find, str)) + if (self->priv->last_find && !tp_strdiff (self->priv->last_find, str)) return FALSE; - g_free (window->last_find); - window->last_find = g_strdup (str); + g_free (self->priv->last_find); + self->priv->last_find = g_strdup (str); - log_window_find_populate (window, str); + log_window_find_populate (self, str); return FALSE; } static void log_window_search_entry_changed_cb (GtkWidget *entry, - EmpathyLogWindow *window) + EmpathyLogWindow *self) { - if (window->source != 0) - g_source_remove (window->source); - window->source = g_timeout_add (500, (GSourceFunc) start_find_search, - window); + if (self->priv->source != 0) + g_source_remove (self->priv->source); + self->priv->source = g_timeout_add (500, (GSourceFunc) start_find_search, + self); } static void @@ -1496,7 +1549,7 @@ log_window_search_entry_icon_pressed_cb (GtkEntry *entry, } static void -log_window_update_buttons_sensitivity (EmpathyLogWindow *window) +log_window_update_buttons_sensitivity (EmpathyLogWindow *self) { GtkTreeView *view; GtkTreeModel *model; @@ -1509,9 +1562,9 @@ log_window_update_buttons_sensitivity (EmpathyLogWindow *window) GtkTreePath *path; gboolean profile, chat, call, video; - tp_clear_object (&window->selected_contact); + tp_clear_object (&self->priv->selected_contact); - view = GTK_TREE_VIEW (log_window->treeview_who); + view = GTK_TREE_VIEW (self->priv->treeview_who); model = gtk_tree_view_get_model (view); selection = gtk_tree_view_get_selection (view); @@ -1538,13 +1591,13 @@ log_window_update_buttons_sensitivity (EmpathyLogWindow *window) g_list_free_full (paths, (GDestroyNotify) gtk_tree_path_free); - window->selected_contact = empathy_contact_from_tpl_contact (account, + self->priv->selected_contact = empathy_contact_from_tpl_contact (account, target); g_object_unref (account); g_object_unref (target); - capabilities = empathy_contact_get_capabilities (window->selected_contact); + capabilities = empathy_contact_get_capabilities (self->priv->selected_contact); profile = chat = TRUE; call = capabilities & EMPATHY_CAPABILITIES_AUDIO; @@ -1556,7 +1609,7 @@ log_window_update_buttons_sensitivity (EmpathyLogWindow *window) /* If the Who pane doesn't contain a contact (e.g. it has many * selected, or has 'Anyone', let's try to get the contact from * the selected event. */ - view = GTK_TREE_VIEW (log_window->treeview_events); + view = GTK_TREE_VIEW (self->priv->treeview_events); model = gtk_tree_view_get_model (view); selection = gtk_tree_view_get_selection (view); @@ -1571,28 +1624,28 @@ log_window_update_buttons_sensitivity (EmpathyLogWindow *window) COL_EVENTS_TARGET, &target, -1); - window->selected_contact = empathy_contact_from_tpl_contact (account, + self->priv->selected_contact = empathy_contact_from_tpl_contact (account, target); g_object_unref (account); g_object_unref (target); - capabilities = empathy_contact_get_capabilities (window->selected_contact); + capabilities = empathy_contact_get_capabilities (self->priv->selected_contact); profile = chat = TRUE; call = capabilities & EMPATHY_CAPABILITIES_AUDIO; video = capabilities & EMPATHY_CAPABILITIES_VIDEO; out: - gtk_widget_set_sensitive (window->button_profile, profile); - gtk_widget_set_sensitive (window->button_chat, chat); - gtk_widget_set_sensitive (window->button_call, call); - gtk_widget_set_sensitive (window->button_video, video); + gtk_widget_set_sensitive (self->priv->button_profile, profile); + gtk_widget_set_sensitive (self->priv->button_chat, chat); + gtk_widget_set_sensitive (self->priv->button_call, call); + gtk_widget_set_sensitive (self->priv->button_video, video); } static void log_window_who_changed_cb (GtkTreeSelection *selection, - EmpathyLogWindow *window) + EmpathyLogWindow *self) { GtkTreeView *view; GtkTreeModel *model; @@ -1610,21 +1663,21 @@ log_window_who_changed_cb (GtkTreeSelection *selection, { g_signal_handlers_block_by_func (selection, log_window_who_changed_cb, - window); + self); gtk_tree_selection_unselect_all (selection); gtk_tree_selection_select_iter (selection, &iter); g_signal_handlers_unblock_by_func (selection, log_window_who_changed_cb, - window); + self); } } - log_window_update_buttons_sensitivity (window); + log_window_update_buttons_sensitivity (self); /* The contact changed, so the dates need to be updated */ - log_window_chats_get_messages (window, TRUE); + log_window_chats_get_messages (self, TRUE); } static void @@ -1646,7 +1699,7 @@ log_manager_got_entities_cb (GObject *manager, if (log_window == NULL) goto out; - if (log_window->count != ctx->count) + if (log_window->priv->count != ctx->count) goto out; if (!tpl_log_manager_get_entities_finish (TPL_LOG_MANAGER (manager), @@ -1657,14 +1710,14 @@ log_manager_got_entities_cb (GObject *manager, goto out; } - view = GTK_TREE_VIEW (ctx->window->treeview_who); + view = GTK_TREE_VIEW (ctx->self->priv->treeview_who); model = gtk_tree_view_get_model (view); selection = gtk_tree_view_get_selection (view); store = GTK_LIST_STORE (model); /* Block signals to stop the logs being retrieved prematurely */ g_signal_handlers_block_by_func (selection, - log_window_who_changed_cb, ctx->window); + log_window_who_changed_cb, ctx->self); for (l = entities; l; l = l->next) { @@ -1683,9 +1736,9 @@ log_manager_got_entities_cb (GObject *manager, COL_WHO_TARGET, entity, -1); - if (ctx->window->selected_account != NULL && + if (ctx->self->priv->selected_account != NULL && !tp_strdiff (tp_proxy_get_object_path (ctx->account), - tp_proxy_get_object_path (ctx->window->selected_account))) + tp_proxy_get_object_path (ctx->self->priv->selected_account))) select_account = TRUE; } g_list_free_full (entities, g_object_unref); @@ -1717,15 +1770,15 @@ log_manager_got_entities_cb (GObject *manager, /* Unblock signals */ g_signal_handlers_unblock_by_func (selection, log_window_who_changed_cb, - ctx->window); + ctx->self); /* We display the selected account if we populate the model with chats from * this account. */ if (select_account) - log_window_chats_set_selected (ctx->window); + log_window_chats_set_selected (ctx->self); out: - _tpl_action_chain_continue (log_window->chain); + _tpl_action_chain_continue (log_window->priv->chain); ctx_free (ctx); } @@ -1734,30 +1787,31 @@ get_entities_for_account (TplActionChain *chain, gpointer user_data) { Ctx *ctx = user_data; - tpl_log_manager_get_entities_async (ctx->window->log_manager, ctx->account, + tpl_log_manager_get_entities_async (ctx->self->priv->log_manager, ctx->account, log_manager_got_entities_cb, ctx); } static void select_first_entity (TplActionChain *chain, gpointer user_data) { + EmpathyLogWindow *self = user_data; GtkTreeView *view; GtkTreeModel *model; GtkTreeSelection *selection; GtkTreeIter iter; - view = GTK_TREE_VIEW (log_window->treeview_who); + view = GTK_TREE_VIEW (self->priv->treeview_who); model = gtk_tree_view_get_model (view); selection = gtk_tree_view_get_selection (view); if (gtk_tree_model_get_iter_first (model, &iter)) gtk_tree_selection_select_iter (selection, &iter); - _tpl_action_chain_continue (log_window->chain); + _tpl_action_chain_continue (self->priv->chain); } static void -log_window_who_populate (EmpathyLogWindow *window) +log_window_who_populate (EmpathyLogWindow *self) { EmpathyAccountChooser *account_chooser; TpAccount *account; @@ -1768,17 +1822,17 @@ log_window_who_populate (EmpathyLogWindow *window) GtkListStore *store; Ctx *ctx; - if (window->hits != NULL) + if (self->priv->hits != NULL) { populate_entities_from_search_hits (); return; } - account_chooser = EMPATHY_ACCOUNT_CHOOSER (window->account_chooser); + account_chooser = EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser); account = empathy_account_chooser_dup_account (account_chooser); all_accounts = empathy_account_chooser_has_all_selected (account_chooser); - view = GTK_TREE_VIEW (window->treeview_who); + view = GTK_TREE_VIEW (self->priv->treeview_who); model = gtk_tree_view_get_model (view); selection = gtk_tree_view_get_selection (view); store = GTK_LIST_STORE (model); @@ -1786,17 +1840,17 @@ log_window_who_populate (EmpathyLogWindow *window) /* Block signals to stop the logs being retrieved prematurely */ g_signal_handlers_block_by_func (selection, log_window_who_changed_cb, - window); + self); gtk_list_store_clear (store); /* Unblock signals */ g_signal_handlers_unblock_by_func (selection, log_window_who_changed_cb, - window); + self); - _tpl_action_chain_clear (window->chain); - window->count++; + _tpl_action_chain_clear (self->priv->chain); + self->priv->count++; if (!all_accounts && account == NULL) { @@ -1804,8 +1858,8 @@ log_window_who_populate (EmpathyLogWindow *window) } else if (!all_accounts) { - ctx = ctx_new (window, account, NULL, NULL, 0, 0, window->count); - _tpl_action_chain_append (window->chain, get_entities_for_account, ctx); + ctx = ctx_new (self, account, NULL, NULL, 0, 0, self->priv->count); + _tpl_action_chain_append (self->priv->chain, get_entities_for_account, ctx); } else { @@ -1819,15 +1873,15 @@ log_window_who_populate (EmpathyLogWindow *window) { account = l->data; - ctx = ctx_new (window, account, NULL, NULL, 0, 0, window->count); - _tpl_action_chain_append (window->chain, + ctx = ctx_new (self, account, NULL, NULL, 0, 0, self->priv->count); + _tpl_action_chain_append (self->priv->chain, get_entities_for_account, ctx); } g_list_free (accounts); } - _tpl_action_chain_append (window->chain, select_first_entity, NULL); - _tpl_action_chain_start (window->chain); + _tpl_action_chain_append (self->priv->chain, select_first_entity, self); + _tpl_action_chain_start (self->priv->chain); } static gint @@ -1883,15 +1937,15 @@ who_row_is_separator (GtkTreeModel *model, static void log_window_events_changed_cb (GtkTreeSelection *selection, - EmpathyLogWindow *window) + EmpathyLogWindow *self) { DEBUG ("log_window_events_changed_cb"); - log_window_update_buttons_sensitivity (window); + log_window_update_buttons_sensitivity (self); } static void -log_window_events_setup (EmpathyLogWindow *window) +log_window_events_setup (EmpathyLogWindow *self) { GtkTreeView *view; GtkTreeModel *model; @@ -1901,11 +1955,11 @@ log_window_events_setup (EmpathyLogWindow *window) GtkTreeStore *store; GtkCellRenderer *cell; - view = GTK_TREE_VIEW (window->treeview_events); + view = GTK_TREE_VIEW (self->priv->treeview_events); selection = gtk_tree_view_get_selection (view); /* new store */ - window->store_events = store = gtk_tree_store_new (COL_EVENTS_COUNT, + self->priv->store_events = store = gtk_tree_store_new (COL_EVENTS_COUNT, G_TYPE_INT, /* type */ G_TYPE_INT64, /* timestamp */ G_TYPE_STRING, /* stringified date */ @@ -1954,13 +2008,13 @@ log_window_events_setup (EmpathyLogWindow *window) /* set up signals */ g_signal_connect (selection, "changed", G_CALLBACK (log_window_events_changed_cb), - window); + self); g_object_unref (store); } static void -log_window_who_setup (EmpathyLogWindow *window) +log_window_who_setup (EmpathyLogWindow *self) { GtkTreeView *view; GtkTreeModel *model; @@ -1970,7 +2024,7 @@ log_window_who_setup (EmpathyLogWindow *window) GtkListStore *store; GtkCellRenderer *cell; - view = GTK_TREE_VIEW (window->treeview_who); + view = GTK_TREE_VIEW (self->priv->treeview_who); selection = gtk_tree_view_get_selection (view); /* new store */ @@ -2023,23 +2077,23 @@ log_window_who_setup (EmpathyLogWindow *window) /* set up signals */ g_signal_connect (selection, "changed", - G_CALLBACK (log_window_who_changed_cb), window); + G_CALLBACK (log_window_who_changed_cb), self); g_object_unref (store); } static void -log_window_chats_accounts_changed_cb (GtkWidget *combobox, - EmpathyLogWindow *window) +log_window_chats_accounts_changed_cb (GtkWidget *combobox, + EmpathyLogWindow *self) { /* Clear all current messages shown in the textview */ - gtk_tree_store_clear (window->store_events); + gtk_tree_store_clear (self->priv->store_events); - log_window_who_populate (window); + log_window_who_populate (self); } static void -log_window_chats_set_selected (EmpathyLogWindow *window) +log_window_chats_set_selected (EmpathyLogWindow *self) { GtkTreeView *view; GtkTreeModel *model; @@ -2048,7 +2102,7 @@ log_window_chats_set_selected (EmpathyLogWindow *window) GtkTreePath *path; gboolean next; - view = GTK_TREE_VIEW (window->treeview_who); + view = GTK_TREE_VIEW (self->priv->treeview_who); model = gtk_tree_view_get_model (view); selection = gtk_tree_view_get_selection (view); @@ -2075,9 +2129,9 @@ log_window_chats_set_selected (EmpathyLogWindow *window) this_is_chatroom = tpl_entity_get_entity_type (this_target) == TPL_ENTITY_ROOM; - if (this_account == window->selected_account && - !tp_strdiff (this_chat_id, window->selected_chat_id) && - this_is_chatroom == window->selected_is_chatroom) + if (this_account == self->priv->selected_account && + !tp_strdiff (this_chat_id, self->priv->selected_chat_id) && + this_is_chatroom == self->priv->selected_is_chatroom) { gtk_tree_selection_select_iter (selection, &iter); path = gtk_tree_model_get_path (model, &iter); @@ -2092,8 +2146,8 @@ log_window_chats_set_selected (EmpathyLogWindow *window) g_object_unref (this_target); } - tp_clear_object (&window->selected_account); - tp_clear_pointer (&window->selected_chat_id, g_free); + tp_clear_object (&self->priv->selected_account); + tp_clear_pointer (&self->priv->selected_chat_id, g_free); } static gint @@ -2134,7 +2188,7 @@ when_row_is_separator (GtkTreeModel *model, static void log_window_when_changed_cb (GtkTreeSelection *selection, - EmpathyLogWindow *window) + EmpathyLogWindow *self) { GtkTreeView *view; GtkTreeModel *model; @@ -2152,22 +2206,22 @@ log_window_when_changed_cb (GtkTreeSelection *selection, { g_signal_handlers_block_by_func (selection, log_window_when_changed_cb, - window); + self); gtk_tree_selection_unselect_all (selection); gtk_tree_selection_select_iter (selection, &iter); g_signal_handlers_unblock_by_func (selection, log_window_when_changed_cb, - window); + self); } } - log_window_chats_get_messages (window, FALSE); + log_window_chats_get_messages (self, FALSE); } static void -log_window_when_setup (EmpathyLogWindow *window) +log_window_when_setup (EmpathyLogWindow *self) { GtkTreeView *view; GtkTreeModel *model; @@ -2177,7 +2231,7 @@ log_window_when_setup (EmpathyLogWindow *window) GtkListStore *store; GtkCellRenderer *cell; - view = GTK_TREE_VIEW (window->treeview_when); + view = GTK_TREE_VIEW (self->priv->treeview_when); selection = gtk_tree_view_get_selection (view); /* new store */ @@ -2225,7 +2279,7 @@ log_window_when_setup (EmpathyLogWindow *window) /* set up signals */ g_signal_connect (selection, "changed", G_CALLBACK (log_window_when_changed_cb), - window); + self); g_object_unref (store); } @@ -2246,7 +2300,7 @@ what_row_is_separator (GtkTreeModel *model, static void log_window_what_changed_cb (GtkTreeSelection *selection, - EmpathyLogWindow *window) + EmpathyLogWindow *self) { GtkTreeView *view; GtkTreeModel *model; @@ -2264,19 +2318,19 @@ log_window_what_changed_cb (GtkTreeSelection *selection, { g_signal_handlers_block_by_func (selection, log_window_what_changed_cb, - window); + self); gtk_tree_selection_unselect_all (selection); gtk_tree_selection_select_iter (selection, &iter); g_signal_handlers_unblock_by_func (selection, log_window_what_changed_cb, - window); + self); } } /* The dates need to be updated if we're not searching */ - log_window_chats_get_messages (window, window->hits == NULL); + log_window_chats_get_messages (self, self->priv->hits == NULL); } static gboolean @@ -2298,7 +2352,7 @@ struct event }; static void -log_window_what_setup (EmpathyLogWindow *window) +log_window_what_setup (EmpathyLogWindow *self) { GtkTreeView *view; GtkTreeModel *model; @@ -2325,7 +2379,7 @@ log_window_what_setup (EmpathyLogWindow *window) GtkTreeIter parent; #endif - view = GTK_TREE_VIEW (window->treeview_what); + view = GTK_TREE_VIEW (self->priv->treeview_what); selection = gtk_tree_view_get_selection (view); /* new store */ @@ -2403,7 +2457,7 @@ log_window_what_setup (EmpathyLogWindow *window) NULL); g_signal_connect (selection, "changed", G_CALLBACK (log_window_what_changed_cb), - window); + self); g_object_unref (store); } @@ -2414,7 +2468,7 @@ log_window_maybe_expand_events (void) GtkTreeView *view; GtkTreeModel *model; - view = GTK_TREE_VIEW (log_window->treeview_events); + view = GTK_TREE_VIEW (log_window->priv->treeview_events); model = gtk_tree_view_get_model (view); /* If there's only one result, expand it */ @@ -2430,10 +2484,10 @@ show_spinner (gpointer data) if (log_window == NULL) return FALSE; - g_object_get (log_window->spinner, "active", &active, NULL); + g_object_get (log_window->priv->spinner, "active", &active, NULL); if (active) - gtk_notebook_set_current_page (GTK_NOTEBOOK (log_window->notebook), + gtk_notebook_set_current_page (GTK_NOTEBOOK (log_window->priv->notebook), PAGE_SPINNER); return FALSE; @@ -2444,8 +2498,8 @@ show_events (TplActionChain *chain, gpointer user_data) { log_window_maybe_expand_events (); - gtk_spinner_stop (GTK_SPINNER (log_window->spinner)); - gtk_notebook_set_current_page (GTK_NOTEBOOK (log_window->notebook), + gtk_spinner_stop (GTK_SPINNER (log_window->priv->spinner)); + gtk_notebook_set_current_page (GTK_NOTEBOOK (log_window->priv->notebook), PAGE_EVENTS); _tpl_action_chain_continue (chain); @@ -2454,12 +2508,12 @@ show_events (TplActionChain *chain, static void start_spinner (void) { - gtk_spinner_start (GTK_SPINNER (log_window->spinner)); - gtk_notebook_set_current_page (GTK_NOTEBOOK (log_window->notebook), + gtk_spinner_start (GTK_SPINNER (log_window->priv->spinner)); + gtk_notebook_set_current_page (GTK_NOTEBOOK (log_window->priv->notebook), PAGE_EMPTY); g_timeout_add (1000, show_spinner, NULL); - _tpl_action_chain_append (log_window->chain, show_events, NULL); + _tpl_action_chain_append (log_window->priv->chain, show_events, NULL); } static void @@ -2482,7 +2536,7 @@ log_window_got_messages_for_date_cb (GObject *manager, return; } - if (log_window->count != ctx->count) + if (log_window->priv->count != ctx->count) goto out; if (!tpl_log_manager_get_events_for_date_finish (TPL_LOG_MANAGER (manager), @@ -2548,7 +2602,7 @@ log_window_got_messages_for_date_cb (GObject *manager, } g_list_free (events); - view = GTK_TREE_VIEW (log_window->treeview_events); + view = GTK_TREE_VIEW (log_window->priv->treeview_events); model = gtk_tree_view_get_model (view); n = gtk_tree_model_iter_n_children (model, NULL) - 1; @@ -2564,7 +2618,7 @@ log_window_got_messages_for_date_cb (GObject *manager, out: ctx_free (ctx); - _tpl_action_chain_continue (log_window->chain); + _tpl_action_chain_continue (log_window->priv->chain); } static void @@ -2572,7 +2626,7 @@ get_events_for_date (TplActionChain *chain, gpointer user_data) { Ctx *ctx = user_data; - tpl_log_manager_get_events_for_date_async (ctx->window->log_manager, + tpl_log_manager_get_events_for_date_async (ctx->self->priv->log_manager, ctx->account, ctx->entity, ctx->event_mask, ctx->date, log_window_got_messages_for_date_cb, @@ -2580,7 +2634,7 @@ get_events_for_date (TplActionChain *chain, gpointer user_data) } static void -log_window_get_messages_for_dates (EmpathyLogWindow *window, +log_window_get_messages_for_dates (EmpathyLogWindow *self, GList *dates) { GList *accounts, *targets, *acc, *targ, *l; @@ -2588,15 +2642,15 @@ log_window_get_messages_for_dates (EmpathyLogWindow *window, EventSubtype subtype; GDate *date, *anytime, *separator; - if (!log_window_get_selected (window, + if (!log_window_get_selected (self, &accounts, &targets, NULL, &event_mask, &subtype)) return; anytime = g_date_new_dmy (2, 1, -1); separator = g_date_new_dmy (1, 1, -1); - _tpl_action_chain_clear (window->chain); - window->count++; + _tpl_action_chain_clear (self->priv->chain); + self->priv->count++; for (acc = accounts, targ = targets; acc != NULL && targ != NULL; @@ -2614,13 +2668,13 @@ log_window_get_messages_for_dates (EmpathyLogWindow *window, { Ctx *ctx; - ctx = ctx_new (window, account, target, date, event_mask, subtype, - window->count); - _tpl_action_chain_append (window->chain, get_events_for_date, ctx); + ctx = ctx_new (self, account, target, date, event_mask, subtype, + self->priv->count); + _tpl_action_chain_append (self->priv->chain, get_events_for_date, ctx); } else { - GtkTreeView *view = GTK_TREE_VIEW (window->treeview_when); + GtkTreeView *view = GTK_TREE_VIEW (self->priv->treeview_when); GtkTreeModel *model = gtk_tree_view_get_model (view); GtkTreeIter iter; gboolean next; @@ -2639,9 +2693,9 @@ log_window_get_messages_for_dates (EmpathyLogWindow *window, if (g_date_compare (d, anytime) != 0 && g_date_compare (d, separator) != 0) { - ctx = ctx_new (window, account, target, d, - event_mask, subtype, window->count); - _tpl_action_chain_append (window->chain, get_events_for_date, ctx); + ctx = ctx_new (self, account, target, d, + event_mask, subtype, self->priv->count); + _tpl_action_chain_append (self->priv->chain, get_events_for_date, ctx); } } } @@ -2649,7 +2703,7 @@ log_window_get_messages_for_dates (EmpathyLogWindow *window, } start_spinner (); - _tpl_action_chain_start (window->chain); + _tpl_action_chain_start (self->priv->chain); g_list_free_full (accounts, g_object_unref); g_list_free_full (targets, g_object_unref); @@ -2674,7 +2728,7 @@ log_manager_got_dates_cb (GObject *manager, if (log_window == NULL) goto out; - if (log_window->count != ctx->count) + if (log_window->priv->count != ctx->count) goto out; if (!tpl_log_manager_get_dates_finish (TPL_LOG_MANAGER (manager), @@ -2685,7 +2739,7 @@ log_manager_got_dates_cb (GObject *manager, goto out; } - view = GTK_TREE_VIEW (log_window->treeview_when); + view = GTK_TREE_VIEW (log_window->priv->treeview_when); model = gtk_tree_view_get_model (view); store = GTK_LIST_STORE (model); @@ -2741,7 +2795,7 @@ log_manager_got_dates_cb (GObject *manager, g_list_free_full (dates, g_free); out: ctx_free (ctx); - _tpl_action_chain_continue (log_window->chain); + _tpl_action_chain_continue (log_window->priv->chain); } static void @@ -2754,11 +2808,11 @@ select_date (TplActionChain *chain, gpointer user_data) gboolean next; gboolean selected = FALSE; - view = GTK_TREE_VIEW (log_window->treeview_when); + view = GTK_TREE_VIEW (log_window->priv->treeview_when); model = gtk_tree_view_get_model (view); selection = gtk_tree_view_get_selection (view); - if (log_window->current_dates != NULL) + if (log_window->priv->current_dates != NULL) { for (next = gtk_tree_model_get_iter_first (model, &iter); next; @@ -2770,7 +2824,7 @@ select_date (TplActionChain *chain, gpointer user_data) COL_WHEN_DATE, &date, -1); - if (g_list_find_custom (log_window->current_dates, date, + if (g_list_find_custom (log_window->priv->current_dates, date, (GCompareFunc) g_date_compare) != NULL) { GtkTreePath *path; @@ -2794,7 +2848,7 @@ select_date (TplActionChain *chain, gpointer user_data) gtk_tree_selection_select_iter (selection, &iter); } - _tpl_action_chain_continue (log_window->chain); + _tpl_action_chain_continue (log_window->priv->chain); } static void @@ -2802,13 +2856,13 @@ get_dates_for_entity (TplActionChain *chain, gpointer user_data) { Ctx *ctx = user_data; - tpl_log_manager_get_dates_async (ctx->window->log_manager, + tpl_log_manager_get_dates_async (ctx->self->priv->log_manager, ctx->account, ctx->entity, ctx->event_mask, log_manager_got_dates_cb, ctx); } static void -log_window_chats_get_messages (EmpathyLogWindow *window, +log_window_chats_get_messages (EmpathyLogWindow *self, gboolean force_get_dates) { GList *accounts, *targets, *dates; @@ -2818,35 +2872,35 @@ log_window_chats_get_messages (EmpathyLogWindow *window, GtkListStore *store; GtkTreeSelection *selection; - if (!log_window_get_selected (window, &accounts, &targets, + if (!log_window_get_selected (self, &accounts, &targets, &dates, &event_mask, NULL)) return; - view = GTK_TREE_VIEW (window->treeview_when); + view = GTK_TREE_VIEW (self->priv->treeview_when); selection = gtk_tree_view_get_selection (view); model = gtk_tree_view_get_model (view); store = GTK_LIST_STORE (model); /* Clear all current messages shown in the textview */ - gtk_tree_store_clear (window->store_events); + gtk_tree_store_clear (self->priv->store_events); - _tpl_action_chain_clear (window->chain); - window->count++; + _tpl_action_chain_clear (self->priv->chain); + self->priv->count++; /* If there's a search use the returned hits */ - if (window->hits != NULL) + if (self->priv->hits != NULL) { if (force_get_dates) { g_signal_handlers_block_by_func (selection, log_window_when_changed_cb, - window); + self); gtk_list_store_clear (store); g_signal_handlers_unblock_by_func (selection, log_window_when_changed_cb, - window); + self); populate_dates_from_search_hits (accounts, targets); } @@ -2860,11 +2914,11 @@ log_window_chats_get_messages (EmpathyLogWindow *window, { GList *acc, *targ; - if (window->current_dates != NULL) + if (self->priv->current_dates != NULL) { - g_list_free_full (window->current_dates, + g_list_free_full (self->priv->current_dates, (GDestroyNotify) g_date_free); - window->current_dates = NULL; + self->priv->current_dates = NULL; } if (gtk_tree_selection_count_selected_rows (selection) > 0) @@ -2885,8 +2939,8 @@ log_window_chats_get_messages (EmpathyLogWindow *window, -1); /* The list takes ownership of the date. */ - window->current_dates = - g_list_prepend (window->current_dates, date); + self->priv->current_dates = + g_list_prepend (self->priv->current_dates, date); } g_list_free_full (paths, (GDestroyNotify) gtk_tree_path_free); @@ -2894,13 +2948,13 @@ log_window_chats_get_messages (EmpathyLogWindow *window, g_signal_handlers_block_by_func (selection, log_window_when_changed_cb, - window); + self); gtk_list_store_clear (store); g_signal_handlers_unblock_by_func (selection, log_window_when_changed_cb, - window); + self); /* Get a list of dates and show them on the treeview */ for (targ = targets, acc = accounts; @@ -2909,18 +2963,18 @@ log_window_chats_get_messages (EmpathyLogWindow *window, { TpAccount *account = acc->data; TplEntity *target = targ->data; - Ctx *ctx = ctx_new (window, account, target, NULL, event_mask, 0, - window->count); + Ctx *ctx = ctx_new (self, account, target, NULL, event_mask, 0, + self->priv->count); - _tpl_action_chain_append (window->chain, get_dates_for_entity, ctx); + _tpl_action_chain_append (self->priv->chain, get_dates_for_entity, ctx); } - _tpl_action_chain_append (window->chain, select_date, NULL); - _tpl_action_chain_start (window->chain); + _tpl_action_chain_append (self->priv->chain, select_date, NULL); + _tpl_action_chain_start (self->priv->chain); } else { /* Show messages of the selected date */ - log_window_get_messages_for_dates (window, dates); + log_window_get_messages_for_dates (self, dates); } g_list_free_full (accounts, g_object_unref); @@ -2982,29 +3036,29 @@ log_window_logger_clear_account_cb (TpProxy *proxy, gpointer user_data, GObject *weak_object) { - EmpathyLogWindow *window = user_data; + EmpathyLogWindow *self = EMPATHY_LOG_WINDOW (user_data); if (error != NULL) g_warning ("Error when clearing logs: %s", error->message); /* Refresh the log viewer so the logs are cleared if the account * has been deleted */ - gtk_tree_store_clear (window->store_events); - log_window_who_populate (window); + gtk_tree_store_clear (self->priv->store_events); + log_window_who_populate (self); /* Re-filter the account chooser so the accounts without logs get greyed out */ empathy_account_chooser_set_filter ( - EMPATHY_ACCOUNT_CHOOSER (window->account_chooser), + EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser), empathy_account_chooser_filter_has_logs, NULL); } static void log_window_clear_logs_chooser_select_account (EmpathyAccountChooser *chooser, - EmpathyLogWindow *window) + EmpathyLogWindow *self) { EmpathyAccountChooser *account_chooser; - account_chooser = EMPATHY_ACCOUNT_CHOOSER (window->account_chooser); + account_chooser = EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser); empathy_account_chooser_set_account (chooser, empathy_account_chooser_get_account (account_chooser)); @@ -3012,7 +3066,7 @@ log_window_clear_logs_chooser_select_account (EmpathyAccountChooser *chooser, static void log_window_delete_menu_clicked_cb (GtkMenuItem *menuitem, - EmpathyLogWindow *window) + EmpathyLogWindow *self) { GtkWidget *dialog, *content_area, *hbox, *label; EmpathyAccountChooser *account_chooser; @@ -3028,12 +3082,12 @@ log_window_delete_menu_clicked_cb (GtkMenuItem *menuitem, /* Select the same account as in the history window */ if (empathy_account_chooser_is_ready (account_chooser)) - log_window_clear_logs_chooser_select_account (account_chooser, window); + log_window_clear_logs_chooser_select_account (account_chooser, self); else g_signal_connect (account_chooser, "ready", - G_CALLBACK (log_window_clear_logs_chooser_select_account), window); + G_CALLBACK (log_window_clear_logs_chooser_select_account), self); - dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW (window->window), + dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW (self), GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_NONE, _("Are you sure you want to delete all logs of previous conversations?")); @@ -3085,7 +3139,7 @@ log_window_delete_menu_clicked_cb (GtkMenuItem *menuitem, emp_cli_logger_call_clear (logger, -1, log_window_logger_clear_account_cb, - window, NULL, G_OBJECT (window->window)); + self, NULL, G_OBJECT (self)); } else { @@ -3098,7 +3152,7 @@ log_window_delete_menu_clicked_cb (GtkMenuItem *menuitem, emp_cli_logger_call_clear_account (logger, -1, tp_proxy_get_object_path (account), log_window_logger_clear_account_cb, - window, NULL, G_OBJECT (window->window)); + self, NULL, G_OBJECT (self)); } g_object_unref (logger); diff --git a/libempathy-gtk/empathy-log-window.h b/libempathy-gtk/empathy-log-window.h index 373f48c36..4c1244cc9 100644 --- a/libempathy-gtk/empathy-log-window.h +++ b/libempathy-gtk/empathy-log-window.h @@ -29,6 +29,31 @@ G_BEGIN_DECLS +#define EMPATHY_TYPE_LOG_WINDOW (empathy_log_window_get_type ()) +#define EMPATHY_LOG_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_LOG_WINDOW, EmpathyLogWindow)) +#define EMPATHY_LOG_WINDOW_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), EMPATHY_TYPE_LOG_WINDOW, EmpathyLogWindowClass)) +#define EMPATHY_IS_LOG_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_LOG_WINDOW)) +#define EMPATHY_IS_LOG_WINDOW_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), EMPATHY_TYPE_LOG_WINDOW)) +#define EMPATHY_LOG_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_LOG_WINDOW, EmpathyLogWindowClass)) + +typedef struct _EmpathyLogWindow EmpathyLogWindow; +typedef struct _EmpathyLogWindowPriv EmpathyLogWindowPriv; +typedef struct _EmpathyLogWindowClass EmpathyLogWindowClass; + +struct _EmpathyLogWindow +{ + GtkDialog parent; + + EmpathyLogWindowPriv *priv; +}; + +struct _EmpathyLogWindowClass +{ + GtkDialogClass parent_class; +}; + +GType empathy_log_window_get_type (void); + GtkWidget * empathy_log_window_show (TpAccount *account, const gchar *chat_id, gboolean chatroom, diff --git a/libempathy-gtk/empathy-log-window.ui b/libempathy-gtk/empathy-log-window.ui index 26d0017f1..b07e42da5 100644 --- a/libempathy-gtk/empathy-log-window.ui +++ b/libempathy-gtk/empathy-log-window.ui @@ -1,383 +1,375 @@ <?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> - <object class="GtkWindow" id="log_window"> + <object class="GtkVBox" id="vbox1"> + <property name="visible">True</property> <property name="can_focus">False</property> - <property name="title" translatable="yes">History</property> - <property name="default_width">800</property> - <property name="default_height">600</property> <child> - <object class="GtkVBox" id="vbox1"> + <object class="GtkMenuBar" id="menubar1"> <property name="visible">True</property> <property name="can_focus">False</property> <child> - <object class="GtkMenuBar" id="menubar1"> + <object class="GtkMenuItem" id="menuitem1"> <property name="visible">True</property> <property name="can_focus">False</property> - <child> - <object class="GtkMenuItem" id="menuitem1"> + <property name="use_action_appearance">False</property> + <property name="label" translatable="yes">_File</property> + <property name="use_underline">True</property> + <child type="submenu"> + <object class="GtkMenu" id="menu1"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="use_action_appearance">False</property> - <property name="label" translatable="yes">_File</property> - <property name="use_underline">True</property> - <child type="submenu"> - <object class="GtkMenu" id="menu1"> + <child> + <object class="GtkImageMenuItem" id="imagemenuitem_quit"> + <property name="label">gtk-quit</property> <property name="visible">True</property> <property name="can_focus">False</property> - <child> - <object class="GtkImageMenuItem" id="imagemenuitem_quit"> - <property name="label">gtk-quit</property> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_action_appearance">False</property> - <property name="use_underline">True</property> - <property name="use_stock">True</property> - </object> - </child> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="use_stock">True</property> </object> </child> </object> </child> - <child> - <object class="GtkMenuItem" id="menuitem2"> + </object> + </child> + <child> + <object class="GtkMenuItem" id="menuitem2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="use_action_appearance">False</property> + <property name="label" translatable="yes">_Edit</property> + <property name="use_underline">True</property> + <child type="submenu"> + <object class="GtkMenu" id="menu2"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="use_action_appearance">False</property> - <property name="label" translatable="yes">_Edit</property> - <property name="use_underline">True</property> - <child type="submenu"> - <object class="GtkMenu" id="menu2"> + <child> + <object class="GtkImageMenuItem" id="imagemenuitem_delete"> + <property name="label" translatable="yes">Delete All History...</property> <property name="visible">True</property> <property name="can_focus">False</property> - <child> - <object class="GtkImageMenuItem" id="imagemenuitem_delete"> - <property name="label" translatable="yes">Delete All History...</property> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_action_appearance">False</property> - <property name="use_stock">False</property> - </object> - </child> + <property name="use_action_appearance">False</property> + <property name="use_stock">False</property> </object> </child> </object> </child> </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkToolbar" id="toolbar1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="toolbar_style">both</property> + <child> + <object class="GtkToolButton" id="toolbutton_profile"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="use_action_appearance">False</property> + <property name="label" translatable="yes">Profile</property> + <property name="use_underline">True</property> + <property name="stock_id">gtk-dialog-info</property> + </object> <packing> <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> + <property name="homogeneous">True</property> </packing> </child> <child> - <object class="GtkToolbar" id="toolbar1"> + <object class="GtkToolButton" id="toolbutton_chat"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="toolbar_style">both</property> - <child> - <object class="GtkToolButton" id="toolbutton_profile"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_action_appearance">False</property> - <property name="label" translatable="yes">Profile</property> - <property name="use_underline">True</property> - <property name="stock_id">gtk-dialog-info</property> - </object> - <packing> - <property name="expand">False</property> - <property name="homogeneous">True</property> - </packing> - </child> - <child> - <object class="GtkToolButton" id="toolbutton_chat"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_action_appearance">False</property> - <property name="label" translatable="yes">Chat</property> - <property name="use_underline">True</property> - <property name="stock_id">gtk-edit</property> - </object> - <packing> - <property name="expand">False</property> - <property name="homogeneous">True</property> - </packing> - </child> + <property name="use_action_appearance">False</property> + <property name="label" translatable="yes">Chat</property> + <property name="use_underline">True</property> + <property name="stock_id">gtk-edit</property> + </object> + <packing> + <property name="expand">False</property> + <property name="homogeneous">True</property> + </packing> + </child> + <child> + <object class="GtkToolButton" id="toolbutton_call"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="use_action_appearance">False</property> + <property name="label" translatable="yes">Call</property> + <property name="use_underline">True</property> + <property name="icon_name">audio-input-microphone</property> + </object> + <packing> + <property name="expand">False</property> + <property name="homogeneous">True</property> + </packing> + </child> + <child> + <object class="GtkToolButton" id="toolbutton_video"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="use_action_appearance">False</property> + <property name="label" translatable="yes">Video</property> + <property name="use_underline">True</property> + <property name="icon_name">camera-video</property> + </object> + <packing> + <property name="expand">False</property> + <property name="homogeneous">True</property> + </packing> + </child> + <child> + <object class="GtkSeparatorToolItem" id="toolbutton_sep1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="draw">False</property> + </object> + <packing> + <property name="expand">False</property> + <property name="homogeneous">True</property> + </packing> + </child> + <child> + <object class="GtkToolItem" id="toolbutton_accounts"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="use_action_appearance">False</property> <child> - <object class="GtkToolButton" id="toolbutton_call"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_action_appearance">False</property> - <property name="label" translatable="yes">Call</property> - <property name="use_underline">True</property> - <property name="icon_name">audio-input-microphone</property> - </object> - <packing> - <property name="expand">False</property> - <property name="homogeneous">True</property> - </packing> + <placeholder/> </child> + </object> + <packing> + <property name="expand">False</property> + <property name="homogeneous">True</property> + </packing> + </child> + <child> + <object class="GtkSeparatorToolItem" id="toolbutton_sep2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="draw">False</property> + </object> + <packing> + <property name="expand">False</property> + <property name="homogeneous">True</property> + </packing> + </child> + <child> + <object class="GtkToolItem" id="toolbutton_search"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="use_action_appearance">False</property> <child> - <object class="GtkToolButton" id="toolbutton_video"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_action_appearance">False</property> - <property name="label" translatable="yes">Video</property> - <property name="use_underline">True</property> - <property name="icon_name">camera-video</property> - </object> - <packing> - <property name="expand">False</property> - <property name="homogeneous">True</property> - </packing> - </child> - <child> - <object class="GtkSeparatorToolItem" id="toolbutton_sep1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="draw">False</property> - </object> - <packing> - <property name="expand">False</property> - <property name="homogeneous">True</property> - </packing> + <placeholder/> </child> + </object> + <packing> + <property name="expand">False</property> + <property name="homogeneous">True</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkVPaned" id="vpaned1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <child> + <object class="GtkHBox" id="hbox1"> + <property name="height_request">160</property> + <property name="visible">True</property> + <property name="can_focus">False</property> <child> - <object class="GtkToolItem" id="toolbutton_accounts"> + <object class="GtkScrolledWindow" id="scrolledwindow_who"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_action_appearance">False</property> + <property name="can_focus">True</property> + <property name="border_width">3</property> <child> - <placeholder/> + <object class="GtkTreeView" id="treeview_who"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection1"/> + </child> + </object> </child> </object> <packing> - <property name="expand">False</property> - <property name="homogeneous">True</property> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkSeparatorToolItem" id="toolbutton_sep2"> + <object class="GtkScrolledWindow" id="scrolledwindow_what"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="draw">False</property> + <property name="can_focus">True</property> + <property name="border_width">3</property> + <child> + <object class="GtkTreeView" id="treeview_what"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection2"/> + </child> + </object> + </child> </object> <packing> - <property name="expand">False</property> - <property name="homogeneous">True</property> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> </packing> </child> <child> - <object class="GtkToolItem" id="toolbutton_search"> + <object class="GtkScrolledWindow" id="scrolledwindow_when"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_action_appearance">False</property> + <property name="can_focus">True</property> + <property name="border_width">3</property> <child> - <placeholder/> + <object class="GtkTreeView" id="treeview_when"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection3"/> + </child> + </object> </child> </object> <packing> - <property name="expand">False</property> - <property name="homogeneous">True</property> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">2</property> </packing> </child> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> + <property name="resize">False</property> + <property name="shrink">True</property> </packing> </child> <child> - <object class="GtkVPaned" id="vpaned1"> + <object class="GtkNotebook" id="notebook"> <property name="visible">True</property> <property name="can_focus">True</property> + <property name="show_tabs">False</property> + <property name="show_border">False</property> <child> - <object class="GtkHBox" id="hbox1"> - <property name="height_request">160</property> + <object class="GtkScrolledWindow" id="scrolledwindow_events"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can_focus">True</property> <child> - <object class="GtkScrolledWindow" id="scrolledwindow_who"> + <object class="GtkTreeView" id="treeview_events"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="border_width">3</property> - <child> - <object class="GtkTreeView" id="treeview_who"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <child internal-child="selection"> - <object class="GtkTreeSelection" id="treeview-selection1"/> - </child> - </object> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection4"/> </child> </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> </child> + </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">page 2</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="homogeneous">True</property> <child> - <object class="GtkScrolledWindow" id="scrolledwindow_what"> + <object class="GtkSpinner" id="spinner"> + <property name="width_request">30</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="border_width">3</property> - <child> - <object class="GtkTreeView" id="treeview_what"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <child internal-child="selection"> - <object class="GtkTreeSelection" id="treeview-selection2"/> - </child> - </object> - </child> + <property name="can_focus">False</property> + <property name="halign">end</property> + <property name="margin_right">6</property> </object> <packing> - <property name="expand">True</property> + <property name="expand">False</property> <property name="fill">True</property> - <property name="position">1</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkScrolledWindow" id="scrolledwindow_when"> + <object class="GtkLabel" id="label3"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="border_width">3</property> - <child> - <object class="GtkTreeView" id="treeview_when"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <child internal-child="selection"> - <object class="GtkTreeSelection" id="treeview-selection3"/> - </child> - </object> - </child> + <property name="can_focus">False</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><span size="x-large">Loading...</span></property> + <property name="use_markup">True</property> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> - <property name="position">2</property> + <property name="position">1</property> </packing> </child> </object> <packing> - <property name="resize">False</property> - <property name="shrink">True</property> + <property name="position">1</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">page 2</property> + </object> + <packing> + <property name="position">1</property> + <property name="tab_fill">False</property> </packing> </child> <child> - <object class="GtkNotebook" id="notebook"> + <object class="GtkScrolledWindow" id="scrolledwindow_empty"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="show_tabs">False</property> - <property name="show_border">False</property> <child> - <object class="GtkScrolledWindow" id="scrolledwindow_events"> + <object class="GtkTreeView" id="treeview_empty"> <property name="visible">True</property> <property name="can_focus">True</property> - <child> - <object class="GtkTreeView" id="treeview_events"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <child internal-child="selection"> - <object class="GtkTreeSelection" id="treeview-selection4"/> - </child> - </object> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection5"/> </child> </object> </child> - <child type="tab"> - <object class="GtkLabel" id="label1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">page 2</property> - </object> - <packing> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <object class="GtkHBox" id="hbox2"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="homogeneous">True</property> - <child> - <object class="GtkSpinner" id="spinner"> - <property name="width_request">30</property> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">end</property> - <property name="margin_right">6</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label3"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><span size="x-large">Loading...</span></property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - <child type="tab"> - <object class="GtkLabel" id="label2"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">page 2</property> - </object> - <packing> - <property name="position">1</property> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow_empty"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <child> - <object class="GtkTreeView" id="treeview_empty"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <child internal-child="selection"> - <object class="GtkTreeSelection" id="treeview-selection5"/> - </child> - </object> - </child> - </object> - <packing> - <property name="position">2</property> - </packing> - </child> </object> <packing> - <property name="resize">True</property> - <property name="shrink">True</property> + <property name="position">2</property> </packing> </child> </object> <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">2</property> + <property name="resize">True</property> + <property name="shrink">True</property> </packing> </child> </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> </child> </object> </interface> |