pidgin/pidginconversationwindow.c

Fri, 05 Mar 2021 03:31:29 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Fri, 05 Mar 2021 03:31:29 -0600
changeset 40810
28d50eece92d
parent 40629
5ee47cc23b41
child 41030
ec8b76f3bf0a
permissions
-rw-r--r--

Create a PidginAvatar widget.

This does everything the existing code does, but trying to integrate right now
is kind of difficult. The plan is to use this in a new PidginInfoPane I have
started, but that change got very large so I just packed it into the end of
the existing info pane.

The only things that are not implement right now, are making menu items
insensitive and that's because we need to figure out a better want to handle
custom avatars for users.

Testing Done:
Ran locally.

Reviewed at https://reviews.imfreedom.org/r/528/

40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Pidgin - Internet Messenger
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * Pidgin is the legal property of its developers, whose names are too numerous
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * source distribution.
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * (at your option) any later version.
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 * GNU General Public License for more details.
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18 *
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 * along with this program; if not, see <https://www.gnu.org/licenses/>.
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #include "pidginconversationwindow.h"
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 struct _PidginConversationWindow {
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26 GtkApplicationWindow parent;
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28 GtkWidget *vbox;
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29 };
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31 G_DEFINE_TYPE(PidginConversationWindow, pidgin_conversation_window,
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32 GTK_TYPE_APPLICATION_WINDOW)
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34 /******************************************************************************
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35 * GObjectImplementation
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36 *****************************************************************************/
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 static void
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38 pidgin_conversation_window_init(PidginConversationWindow *window) {
40627
3d6797191bf5 Create a new menu bar for PidginConversationWindow. This is just the menu itself and no behavior.
Gary Kramlich <grim@reaperworld.com>
parents: 40577
diff changeset
39 GtkBuilder *builder = NULL;
3d6797191bf5 Create a new menu bar for PidginConversationWindow. This is just the menu itself and no behavior.
Gary Kramlich <grim@reaperworld.com>
parents: 40577
diff changeset
40 GtkWidget *menubar = NULL;
3d6797191bf5 Create a new menu bar for PidginConversationWindow. This is just the menu itself and no behavior.
Gary Kramlich <grim@reaperworld.com>
parents: 40577
diff changeset
41 GMenuModel *model = NULL;
3d6797191bf5 Create a new menu bar for PidginConversationWindow. This is just the menu itself and no behavior.
Gary Kramlich <grim@reaperworld.com>
parents: 40577
diff changeset
42
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43 gtk_widget_init_template(GTK_WIDGET(window));
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 gtk_window_set_application(GTK_WINDOW(window),
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46 GTK_APPLICATION(g_application_get_default()));
40627
3d6797191bf5 Create a new menu bar for PidginConversationWindow. This is just the menu itself and no behavior.
Gary Kramlich <grim@reaperworld.com>
parents: 40577
diff changeset
47
3d6797191bf5 Create a new menu bar for PidginConversationWindow. This is just the menu itself and no behavior.
Gary Kramlich <grim@reaperworld.com>
parents: 40577
diff changeset
48 /* setup our menu */
3d6797191bf5 Create a new menu bar for PidginConversationWindow. This is just the menu itself and no behavior.
Gary Kramlich <grim@reaperworld.com>
parents: 40577
diff changeset
49 builder = gtk_builder_new_from_resource("/im/pidgin/Pidgin/Conversations/menu.ui");
3d6797191bf5 Create a new menu bar for PidginConversationWindow. This is just the menu itself and no behavior.
Gary Kramlich <grim@reaperworld.com>
parents: 40577
diff changeset
50
3d6797191bf5 Create a new menu bar for PidginConversationWindow. This is just the menu itself and no behavior.
Gary Kramlich <grim@reaperworld.com>
parents: 40577
diff changeset
51 model = (GMenuModel *)gtk_builder_get_object(builder, "conversation");
3d6797191bf5 Create a new menu bar for PidginConversationWindow. This is just the menu itself and no behavior.
Gary Kramlich <grim@reaperworld.com>
parents: 40577
diff changeset
52 menubar = gtk_menu_bar_new_from_model(model);
3d6797191bf5 Create a new menu bar for PidginConversationWindow. This is just the menu itself and no behavior.
Gary Kramlich <grim@reaperworld.com>
parents: 40577
diff changeset
53 gtk_box_pack_start(GTK_BOX(window->vbox), menubar, FALSE, FALSE, 0);
3d6797191bf5 Create a new menu bar for PidginConversationWindow. This is just the menu itself and no behavior.
Gary Kramlich <grim@reaperworld.com>
parents: 40577
diff changeset
54 gtk_widget_show(menubar);
3d6797191bf5 Create a new menu bar for PidginConversationWindow. This is just the menu itself and no behavior.
Gary Kramlich <grim@reaperworld.com>
parents: 40577
diff changeset
55
3d6797191bf5 Create a new menu bar for PidginConversationWindow. This is just the menu itself and no behavior.
Gary Kramlich <grim@reaperworld.com>
parents: 40577
diff changeset
56 g_object_unref(G_OBJECT(builder));
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
57 }
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
58
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
59 static void
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60 pidgin_conversation_window_class_init(PidginConversationWindowClass *klass) {
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63 gtk_widget_class_set_template_from_resource(
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
64 widget_class,
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
65 "/im/pidgin/Pidgin/Conversations/window.ui"
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66 );
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
67
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68 gtk_widget_class_bind_template_child(widget_class, PidginConversationWindow,
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
69 vbox);
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
70 }
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
71
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
72 /******************************************************************************
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
73 * API
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
74 *****************************************************************************/
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
75 GtkWidget *
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
76 pidgin_conversation_window_new(void) {
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
77 return GTK_WIDGET(g_object_new(PIDGIN_TYPE_CONVERSATION_WINDOW, NULL));
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
78 }
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
79
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
80 GtkWidget *
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
81 pidgin_conversation_window_get_vbox(PidginConversationWindow *window) {
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
82 g_return_val_if_fail(PIDGIN_IS_CONVERSATION_WINDOW(window), NULL);
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
84 return window->vbox;
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85 }

mercurial