/soc/2015/igor.gajowiak/chatlog: dd33748bb679: Implemented start...
Igor Gajowiak <[email protected]>
| Newsgroups | gmane.comp.gnome.gaim.cvs |
|---|---|
| Message-ID | <[email protected]> |
Changeset: dd33748bb679ea86d9c74a08dc4e16a73a732f8e Author: Igor Gajowiak <[email protected]> Date: 2015-08-01 01:08 +0200 Branch: default URL: https://hg.pidgin.im/soc/2015/igor.gajowiak/chatlog/rev/dd33748bb679 Description: Implemented start conversation button. diffstat: pidgin/gtkgenericlog.c | 71 +++++++++++++++++++++++++++++++++++++++++++------ pidgin/gtkgenericlog.h | 3 ++ 2 files changed, 65 insertions(+), 9 deletions(-) diffs (154 lines): diff --git a/pidgin/gtkgenericlog.c b/pidgin/gtkgenericlog.c --- a/pidgin/gtkgenericlog.c +++ b/pidgin/gtkgenericlog.c @@ -146,7 +146,17 @@ create_options_menu_item(PidginGenericLo static void on_start_conversation_item_clicked(GtkAction *action, gpointer data) { - printf("on_start_conversation_item_clicked\n"); + g_assert(data); + + PidginGenericLogViewer *viewer = (PidginGenericLogViewer*) data; + + PurpleBuddy *buddy = viewer->current_buddy; + g_return_if_fail(buddy != NULL); + + PurpleAccount *account = purple_buddy_get_account(buddy); + g_return_if_fail(account != NULL); + + purple_im_conversation_new(account, purple_buddy_get_name(buddy)); } static void @@ -156,7 +166,9 @@ on_wipe_log_for_buddy_item_clicked(GtkAc } static GtkWidget * -create_buddy_menu_item(PidginGenericLogViewer *viewer) +create_buddy_menu_item(PidginGenericLogViewer *viewer, + GtkWidget **start_conversation_item_res, + GtkWidget **wipe_log_for_buddy_item_res) { g_assert(viewer); @@ -180,11 +192,16 @@ create_buddy_menu_item(PidginGenericLogV g_signal_connect(G_OBJECT(wipe_log_for_buddy_item), "activate", G_CALLBACK(on_wipe_log_for_buddy_item_clicked), viewer); + *start_conversation_item_res = start_conversation_item; + *wipe_log_for_buddy_item_res = wipe_log_for_buddy_item; + return buddy_item; } static GtkWidget * -create_menu_bar(PidginGenericLogViewer *viewer) +create_menu_bar(PidginGenericLogViewer *viewer, + GtkWidget **start_conversation_item_res, + GtkWidget **wipe_log_for_buddy_item_res) { g_assert(viewer); @@ -196,12 +213,40 @@ create_menu_bar(PidginGenericLogViewer * GtkWidget *options_item = create_options_menu_item(viewer); gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), options_item); - GtkWidget *buddy_item = create_buddy_menu_item(viewer); + GtkWidget *buddy_item = create_buddy_menu_item(viewer, + start_conversation_item_res, wipe_log_for_buddy_item_res); gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), buddy_item); return menu_bar; } +static void +update_menu_buttons(PidginGenericLogViewer *viewer) +{ + g_assert(viewer); + + gboolean start_conv_enabled = TRUE; + gboolean wipe_log_enabled = TRUE; + + if (!viewer->current_buddy) { + start_conv_enabled = FALSE; + wipe_log_enabled = FALSE; + } + else { + PurpleAccount *account = purple_buddy_get_account( + viewer->current_buddy); + + /* Disable start conversation button if account is disabled */ + if (!account || !purple_account_get_connection(account)) + start_conv_enabled = FALSE; + } + + gtk_widget_set_sensitive(viewer->start_conversation_item, + start_conv_enabled); + gtk_widget_set_sensitive(viewer->wipe_log_for_buddy_item, + wipe_log_enabled); +} + /******************************************************************************/ /* Buddy list view */ /******************************************************************************/ @@ -256,6 +301,8 @@ on_buddylist_row_changed(GtkTreeSelectio } } + update_menu_buttons(viewer); + /* Unhook calendar model during updating to get better performance */ gtk_tree_view_set_model(GTK_TREE_VIEW(viewer->calendar_tree_view), NULL); @@ -774,12 +821,16 @@ on_close_response(GtkWidget *widget, gin } static GtkWidget * -create_window(PidginGenericLogViewer *viewer, GtkWidget **buddylist_view_res, - GtkTreeStore **buddylist_store_res, GtkWidget **calendar_view_res, - GtkTreeStore **calendar_store_res, GtkWidget **webview_res, - PidginConvTheme **theme_res) +create_window(PidginGenericLogViewer *viewer, + GtkWidget **start_conversation_item_res, + GtkWidget **wipe_log_for_buddy_item_res, + GtkWidget **buddylist_view_res, GtkTreeStore **buddylist_store_res, + GtkWidget **calendar_view_res, GtkTreeStore **calendar_store_res, + GtkWidget **webview_res, PidginConvTheme **theme_res) { g_assert(viewer); + g_assert(start_conversation_item_res); + g_assert(wipe_log_for_buddy_item_res); g_assert(buddylist_view_res); g_assert(buddylist_store_res); g_assert(calendar_view_res); @@ -800,7 +851,8 @@ create_window(PidginGenericLogViewer *vi g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_hide_on_delete), NULL); - GtkWidget *menu_bar = create_menu_bar(viewer); + GtkWidget *menu_bar = create_menu_bar(viewer, start_conversation_item_res, + wipe_log_for_buddy_item_res); gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(window))), menu_bar, FALSE, TRUE, 0); @@ -847,6 +899,7 @@ create_genericlog_viewer() PidginGenericLogViewer *viewer = g_new0(PidginGenericLogViewer, 1); viewer->window = create_window(viewer, + &viewer->start_conversation_item, &viewer->wipe_log_for_buddy_item, &viewer->blist_tree_view, &viewer->blist_tree_store, &viewer->calendar_tree_view, &viewer->calendar_tree_store, &viewer->webview, &viewer->theme); diff --git a/pidgin/gtkgenericlog.h b/pidgin/gtkgenericlog.h --- a/pidgin/gtkgenericlog.h +++ b/pidgin/gtkgenericlog.h @@ -32,6 +32,9 @@ typedef struct PidginGenericLogViewer { GtkWidget *window; + GtkWidget *start_conversation_item; + GtkWidget *wipe_log_for_buddy_item; + GtkWidget *blist_tree_view; GtkTreeStore *blist_tree_store; _______________________________________________ Commits mailing list [email protected] https://pidgin.im/cgi-bin/mailman/listinfo/commits