/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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.