| 125 purple_account_get_username(account)); |
125 purple_account_get_username(account)); |
| 126 |
126 |
| 127 if (GTK_IS_BOX(cont)) { |
127 if (GTK_IS_BOX(cont)) { |
| 128 gtk_widget_set_halign(image, GTK_ALIGN_START); |
128 gtk_widget_set_halign(image, GTK_ALIGN_START); |
| 129 gtk_widget_set_valign(image, GTK_ALIGN_START); |
129 gtk_widget_set_valign(image, GTK_ALIGN_START); |
| 130 gtk_box_pack_end(GTK_BOX(cont), image, FALSE, TRUE, 0); |
130 gtk_widget_set_hexpand(image, TRUE); |
| 131 } |
131 gtk_box_append(GTK_BOX(cont), image); |
| 132 gtk_widget_show(image); |
132 } |
| 133 } |
133 } |
| 134 |
134 |
| 135 static void * |
135 static void * |
| 136 pidgin_notify_message(PurpleNotifyMessageType type, const char *title, |
136 pidgin_notify_message(PurpleNotifyMessageType type, const char *title, |
| 137 const char *primary, const char *secondary, |
137 const char *primary, const char *secondary, |
| 164 break; |
164 break; |
| 165 } |
165 } |
| 166 |
166 |
| 167 if (icon_name != NULL) |
167 if (icon_name != NULL) |
| 168 { |
168 { |
| 169 img = gtk_image_new_from_icon_name(icon_name, |
169 img = gtk_image_new_from_icon_name(icon_name); |
| 170 GTK_ICON_SIZE_DIALOG); |
170 gtk_image_set_pixel_size(GTK_IMAGE(img), 48); |
| 171 gtk_widget_set_halign(img, GTK_ALIGN_START); |
171 gtk_widget_set_halign(img, GTK_ALIGN_START); |
| 172 gtk_widget_set_valign(img, GTK_ALIGN_START); |
172 gtk_widget_set_valign(img, GTK_ALIGN_START); |
| 173 } |
173 } |
| 174 |
174 |
| 175 dialog = gtk_dialog_new_with_buttons(title ? title : PIDGIN_ALERT_TITLE, |
175 dialog = gtk_dialog_new_with_buttons(title ? title : PIDGIN_ALERT_TITLE, |
| 176 NULL, 0, _("Close"), |
176 NULL, 0, _("Close"), |
| 177 GTK_RESPONSE_CLOSE, NULL); |
177 GTK_RESPONSE_CLOSE, NULL); |
| 178 |
178 |
| 179 gtk_window_set_role(GTK_WINDOW(dialog), "notify_dialog"); |
|
| 180 |
|
| 181 g_signal_connect(G_OBJECT(dialog), "response", |
179 g_signal_connect(G_OBJECT(dialog), "response", |
| 182 G_CALLBACK(message_response_cb), dialog); |
180 G_CALLBACK(message_response_cb), dialog); |
| 183 |
181 |
| 184 gtk_container_set_border_width(GTK_CONTAINER(dialog), 12); |
|
| 185 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
182 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
| 186 gtk_box_set_spacing(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
183 gtk_box_set_spacing(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| 187 12); |
184 12); |
| 188 gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
|
| 189 6); |
|
| 190 |
185 |
| 191 hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 12); |
186 hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 12); |
| 192 gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
187 gtk_box_append(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| 193 hbox); |
188 hbox); |
| 194 |
189 |
| 195 if (img != NULL) |
190 if (img != NULL) { |
| 196 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
191 gtk_box_append(GTK_BOX(hbox), img); |
| 197 |
192 } |
| 198 pidgin_widget_decorate_account(hbox, |
|
| 199 purple_request_cpar_get_account(cpar)); |
|
| 200 |
193 |
| 201 primary_esc = g_markup_escape_text(primary, -1); |
194 primary_esc = g_markup_escape_text(primary, -1); |
| 202 secondary_esc = (secondary != NULL) ? g_markup_escape_text(secondary, -1) : NULL; |
195 secondary_esc = (secondary != NULL) ? g_markup_escape_text(secondary, -1) : NULL; |
| 203 g_snprintf(label_text, sizeof(label_text), |
196 g_snprintf(label_text, sizeof(label_text), |
| 204 "<span weight=\"bold\" size=\"larger\">%s</span>%s%s", |
197 "<span weight=\"bold\" size=\"larger\">%s</span>%s%s", |
| 208 g_free(secondary_esc); |
201 g_free(secondary_esc); |
| 209 |
202 |
| 210 label = gtk_label_new(NULL); |
203 label = gtk_label_new(NULL); |
| 211 |
204 |
| 212 gtk_label_set_markup(GTK_LABEL(label), label_text); |
205 gtk_label_set_markup(GTK_LABEL(label), label_text); |
| 213 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); |
206 gtk_label_set_wrap(GTK_LABEL(label), TRUE); |
| 214 gtk_label_set_selectable(GTK_LABEL(label), TRUE); |
207 gtk_label_set_selectable(GTK_LABEL(label), TRUE); |
| 215 gtk_label_set_xalign(GTK_LABEL(label), 0); |
208 gtk_label_set_xalign(GTK_LABEL(label), 0); |
| 216 gtk_label_set_yalign(GTK_LABEL(label), 0); |
209 gtk_label_set_yalign(GTK_LABEL(label), 0); |
| 217 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
210 gtk_box_append(GTK_BOX(hbox), label); |
| |
211 |
| |
212 pidgin_widget_decorate_account(hbox, |
| |
213 purple_request_cpar_get_account(cpar)); |
| 218 |
214 |
| 219 g_object_set_data(G_OBJECT(dialog), "pidgin-parent-from", |
215 g_object_set_data(G_OBJECT(dialog), "pidgin-parent-from", |
| 220 purple_request_cpar_get_parent_from(cpar)); |
216 purple_request_cpar_get_parent_from(cpar)); |
| 221 pidgin_auto_parent_window(dialog); |
217 pidgin_auto_parent_window(dialog); |
| 222 |
218 |
| 223 gtk_widget_show_all(dialog); |
219 gtk_widget_show(dialog); |
| 224 |
220 |
| 225 return dialog; |
221 return dialog; |
| 226 } |
222 } |
| 227 |
223 |
| 228 static gboolean |
224 static gboolean |
| 229 formatted_input_cb(GtkWidget *win, GdkEventKey *event, gpointer data) |
225 formatted_input_cb(GtkWidget *win, guint keyval, G_GNUC_UNUSED guint keycode, |
| 230 { |
226 G_GNUC_UNUSED GdkModifierType state, gpointer data) |
| 231 if (event->keyval == GDK_KEY_Escape) |
227 { |
| 232 { |
228 if (keyval == GDK_KEY_Escape) { |
| 233 purple_notify_close(PURPLE_NOTIFY_FORMATTED, win); |
229 purple_notify_close(PURPLE_NOTIFY_FORMATTED, win); |
| 234 |
230 |
| 235 return TRUE; |
231 return TRUE; |
| 236 } |
232 } |
| 237 |
233 |
| 274 g_free(secondary_esc); |
271 g_free(secondary_esc); |
| 275 |
272 |
| 276 label = gtk_label_new(NULL); |
273 label = gtk_label_new(NULL); |
| 277 |
274 |
| 278 gtk_label_set_markup(GTK_LABEL(label), label_text); |
275 gtk_label_set_markup(GTK_LABEL(label), label_text); |
| 279 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); |
276 gtk_label_set_wrap(GTK_LABEL(label), TRUE); |
| 280 gtk_label_set_selectable(GTK_LABEL(label), TRUE); |
277 gtk_label_set_selectable(GTK_LABEL(label), TRUE); |
| 281 gtk_label_set_xalign(GTK_LABEL(label), 0); |
278 gtk_label_set_xalign(GTK_LABEL(label), 0); |
| 282 gtk_label_set_yalign(GTK_LABEL(label), 0); |
279 gtk_label_set_yalign(GTK_LABEL(label), 0); |
| 283 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); |
280 gtk_box_append(GTK_BOX(vbox), label); |
| 284 gtk_widget_show(label); |
|
| 285 |
281 |
| 286 /* Add the view */ |
282 /* Add the view */ |
| 287 sw = gtk_scrolled_window_new(NULL, NULL); |
283 sw = gtk_scrolled_window_new(); |
| 288 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); |
284 gtk_box_append(GTK_BOX(vbox), sw); |
| |
285 gtk_widget_set_valign(sw, GTK_ALIGN_FILL); |
| |
286 gtk_widget_set_vexpand(sw, TRUE); |
| 289 |
287 |
| 290 buffer = talkatu_html_buffer_new(); |
288 buffer = talkatu_html_buffer_new(); |
| 291 view = talkatu_view_new_with_buffer(buffer); |
289 view = talkatu_view_new_with_buffer(buffer); |
| 292 gtk_container_add(GTK_CONTAINER(sw), view); |
290 gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(sw), view); |
| 293 gtk_widget_set_name(view, "pidgin_notify_view"); |
291 gtk_widget_set_name(view, "pidgin_notify_view"); |
| 294 gtk_widget_set_size_request(view, 300, 250); |
292 gtk_widget_set_size_request(view, 300, 250); |
| 295 gtk_widget_show_all(sw); |
|
| 296 |
293 |
| 297 /* Add the Close button. */ |
294 /* Add the Close button. */ |
| 298 button = gtk_dialog_add_button(GTK_DIALOG(window), _("Close"), GTK_RESPONSE_CLOSE); |
295 button = gtk_dialog_add_button(GTK_DIALOG(window), _("Close"), GTK_RESPONSE_CLOSE); |
| 299 gtk_widget_grab_focus(button); |
296 gtk_widget_grab_focus(button); |
| 300 |
297 |
| 301 g_signal_connect_swapped(G_OBJECT(button), "clicked", |
298 g_signal_connect_swapped(G_OBJECT(button), "clicked", |
| 302 G_CALLBACK(formatted_close_cb), window); |
299 G_CALLBACK(formatted_close_cb), window); |
| 303 g_signal_connect(G_OBJECT(window), "key_press_event", |
300 event = gtk_event_controller_key_new(); |
| 304 G_CALLBACK(formatted_input_cb), NULL); |
301 gtk_widget_add_controller(window, event); |
| |
302 g_signal_connect(G_OBJECT(event), "key-pressed", |
| |
303 G_CALLBACK(formatted_input_cb), NULL); |
| 305 |
304 |
| 306 /* Make sure URLs are clickable */ |
305 /* Make sure URLs are clickable */ |
| 307 linked_text = purple_markup_linkify(text); |
306 linked_text = purple_markup_linkify(text); |
| 308 talkatu_markup_set_html(TALKATU_BUFFER(buffer), linked_text, -1); |
307 talkatu_markup_set_html(TALKATU_BUFFER(buffer), linked_text, -1); |
| 309 g_free(linked_text); |
308 g_free(linked_text); |
| 384 data->results = results; |
384 data->results = results; |
| 385 |
385 |
| 386 /* Create the window */ |
386 /* Create the window */ |
| 387 window = gtk_dialog_new(); |
387 window = gtk_dialog_new(); |
| 388 gtk_window_set_title(GTK_WINDOW(window), title ? title :_("Search Results")); |
388 gtk_window_set_title(GTK_WINDOW(window), title ? title :_("Search Results")); |
| 389 gtk_container_set_border_width(GTK_CONTAINER(window), 12); |
|
| 390 gtk_window_set_resizable(GTK_WINDOW(window), TRUE); |
389 gtk_window_set_resizable(GTK_WINDOW(window), TRUE); |
| 391 |
390 |
| 392 g_signal_connect_swapped(G_OBJECT(window), "delete_event", |
391 g_signal_connect_swapped(G_OBJECT(window), "delete_event", |
| 393 G_CALLBACK(searchresults_close_cb), data); |
392 G_CALLBACK(searchresults_close_cb), data); |
| 394 |
393 |
| 405 (secondary ? secondary_esc : "")); |
404 (secondary ? secondary_esc : "")); |
| 406 g_free(primary_esc); |
405 g_free(primary_esc); |
| 407 g_free(secondary_esc); |
406 g_free(secondary_esc); |
| 408 label = gtk_label_new(NULL); |
407 label = gtk_label_new(NULL); |
| 409 gtk_label_set_markup(GTK_LABEL(label), label_text); |
408 gtk_label_set_markup(GTK_LABEL(label), label_text); |
| 410 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); |
409 gtk_label_set_wrap(GTK_LABEL(label), TRUE); |
| 411 gtk_label_set_xalign(GTK_LABEL(label), 0); |
410 gtk_label_set_xalign(GTK_LABEL(label), 0); |
| 412 gtk_label_set_yalign(GTK_LABEL(label), 0); |
411 gtk_label_set_yalign(GTK_LABEL(label), 0); |
| 413 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); |
412 gtk_box_append(GTK_BOX(vbox), label); |
| 414 gtk_widget_show(label); |
|
| 415 g_free(label_text); |
413 g_free(label_text); |
| 416 |
414 |
| 417 /* +1 is for the automagically created Status column. */ |
415 /* +1 is for the automagically created Status column. */ |
| 418 col_num = g_list_length(results->columns) + 1; |
416 col_num = g_list_length(results->columns) + 1; |
| 419 |
417 |
| 433 g_object_unref(G_OBJECT(model)); |
431 g_object_unref(G_OBJECT(model)); |
| 434 gtk_widget_set_size_request(treeview, 500, 400); |
432 gtk_widget_set_size_request(treeview, 500, 400); |
| 435 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)), |
433 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)), |
| 436 GTK_SELECTION_SINGLE); |
434 GTK_SELECTION_SINGLE); |
| 437 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), TRUE); |
435 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), TRUE); |
| 438 gtk_box_pack_start(GTK_BOX(vbox), |
436 sw = gtk_scrolled_window_new(); |
| 439 pidgin_make_scrollable(treeview, GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS, -1, -1), |
437 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), |
| 440 TRUE, TRUE, 0); |
438 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); |
| 441 gtk_widget_show(treeview); |
439 gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(sw), treeview); |
| |
440 gtk_widget_set_valign(sw, GTK_ALIGN_FILL); |
| |
441 gtk_widget_set_vexpand(sw, TRUE); |
| |
442 gtk_box_append(GTK_BOX(vbox), sw); |
| 442 |
443 |
| 443 renderer = gtk_cell_renderer_pixbuf_new(); |
444 renderer = gtk_cell_renderer_pixbuf_new(); |
| 444 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview), |
445 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview), |
| 445 -1, "", renderer, "pixbuf", 0, NULL); |
446 -1, "", renderer, "pixbuf", 0, NULL); |
| 446 |
447 |
| 589 } |
590 } |
| 590 |
591 |
| 591 static void |
592 static void |
| 592 pidgin_close_notify(PurpleNotifyType type, void *ui_handle) |
593 pidgin_close_notify(PurpleNotifyType type, void *ui_handle) |
| 593 { |
594 { |
| 594 if (type == PURPLE_NOTIFY_SEARCHRESULTS) |
595 if (type == PURPLE_NOTIFY_SEARCHRESULTS) { |
| 595 { |
|
| 596 PidginNotifySearchResultsData *data = (PidginNotifySearchResultsData *)ui_handle; |
596 PidginNotifySearchResultsData *data = (PidginNotifySearchResultsData *)ui_handle; |
| 597 |
597 |
| 598 gtk_widget_destroy(data->window); |
598 gtk_window_destroy(GTK_WINDOW(data->window)); |
| 599 purple_notify_searchresults_free(data->results); |
599 purple_notify_searchresults_free(data->results); |
| 600 |
600 |
| 601 g_free(data); |
601 g_free(data); |
| 602 } |
602 |
| 603 else if (ui_handle != NULL) |
603 } else if (ui_handle != NULL) { |
| 604 gtk_widget_destroy(GTK_WIDGET(ui_handle)); |
604 gtk_window_destroy(GTK_WINDOW(ui_handle)); |
| |
605 } |
| 605 } |
606 } |
| 606 |
607 |
| 607 static void * |
608 static void * |
| 608 pidgin_notify_uri(const char *uri) { |
609 pidgin_notify_uri(const char *uri) { |
| 609 gtk_show_uri_on_window(NULL, uri, GDK_CURRENT_TIME, NULL); |
610 gtk_show_uri(NULL, uri, GDK_CURRENT_TIME); |
| 610 |
611 |
| 611 return NULL; |
612 return NULL; |
| 612 } |
613 } |
| 613 |
614 |
| 614 static void* |
615 static void* |