pidgin/plugins/disco/gtkdisco.c

branch
gtk4
changeset 41562
bfd0330f09fb
parent 41499
a80a41434f44
child 41854
c1d7e7445b0f
equal deleted inserted replaced
41561:ac5416e7e4f5 41562:bfd0330f09fb
279 purple_blist_request_add_buddy(account, jid, NULL, NULL); 279 purple_blist_request_add_buddy(account, jid, NULL, NULL);
280 } 280 }
281 } 281 }
282 282
283 static gboolean 283 static gboolean
284 service_click_cb(GtkTreeView *tree, GdkEventButton *event, gpointer user_data) 284 service_click_cb(G_GNUC_UNUSED GtkGestureClick *click,
285 { 285 G_GNUC_UNUSED gint n_press,
286 PidginDiscoDialog *dialog = user_data; 286 gdouble x, gdouble y, gpointer data)
287 {
288 PidginDiscoDialog *dialog = data;
287 XmppDiscoService *service; 289 XmppDiscoService *service;
288 290
289 GtkTreePath *path; 291 GtkTreePath *path;
290 GtkTreeIter iter; 292 GtkTreeIter iter;
291 GValue val; 293 GValue val;
292 294
293 GdkRectangle rect; 295 GdkRectangle rect;
294 296
295 if (!gdk_event_triggers_context_menu((GdkEvent *)event)) {
296 return FALSE;
297 }
298
299 /* Figure out what was clicked */ 297 /* Figure out what was clicked */
300 if (!gtk_tree_view_get_path_at_pos(tree, event->x, event->y, &path, 298 if (!gtk_tree_view_get_path_at_pos(dialog->tree, (gint)x, (gint)y, &path,
301 NULL, NULL, NULL)) 299 NULL, NULL, NULL))
302 { 300 {
303 return FALSE; 301 return FALSE;
304 } 302 }
305 gtk_tree_model_get_iter(GTK_TREE_MODEL(dialog->model), &iter, path); 303 gtk_tree_model_get_iter(GTK_TREE_MODEL(dialog->model), &iter, path);
306 gtk_tree_path_free(path); 304 gtk_tree_path_free(path);
312 if (!service) { 310 if (!service) {
313 return FALSE; 311 return FALSE;
314 } 312 }
315 313
316 gtk_tree_view_convert_bin_window_to_widget_coords(dialog->tree, 314 gtk_tree_view_convert_bin_window_to_widget_coords(dialog->tree,
317 (gint)event->x, 315 (gint)x, (gint)y,
318 (gint)event->y,
319 &rect.x, &rect.y); 316 &rect.x, &rect.y);
320 rect.width = rect.height = 1; 317 rect.width = rect.height = 1;
321 318
322 gtk_popover_set_pointing_to(GTK_POPOVER(dialog->popover), &rect); 319 gtk_popover_set_pointing_to(GTK_POPOVER(dialog->popover), &rect);
323 gtk_popover_popup(GTK_POPOVER(dialog->popover)); 320 gtk_popover_popup(GTK_POPOVER(dialog->popover));
426 PidginDiscoDialog *dialog = data; 423 PidginDiscoDialog *dialog = data;
427 424
428 pidgin_disco_list_set_in_progress(dialog->discolist, FALSE); 425 pidgin_disco_list_set_in_progress(dialog->discolist, FALSE);
429 } 426 }
430 427
431 static void close_button_cb(GtkButton *button, PidginDiscoDialog *dialog)
432 {
433 gtk_widget_destroy(GTK_WIDGET(dialog));
434 }
435
436 static gboolean 428 static gboolean
437 disco_query_tooltip(GtkWidget *widget, int x, int y, gboolean keyboard_mode, 429 disco_query_tooltip(GtkWidget *widget, int x, int y, gboolean keyboard_mode,
438 GtkTooltip *tooltip, gpointer data) 430 GtkTooltip *tooltip, gpointer data)
439 { 431 {
440 PidginDiscoDialog *dialog = data; 432 PidginDiscoDialog *dialog = data;
563 void pidgin_disco_dialogs_destroy_all(void) 555 void pidgin_disco_dialogs_destroy_all(void)
564 { 556 {
565 while (dialogs) { 557 while (dialogs) {
566 GtkWidget *dialog = dialogs->data; 558 GtkWidget *dialog = dialogs->data;
567 559
568 gtk_widget_destroy(dialog); 560 gtk_window_destroy(GTK_WINDOW(dialog));
569 /* destroy_win_cb removes the dialog from the list */ 561 /* destroy_win_cb removes the dialog from the list */
570 } 562 }
571 } 563 }
572 564
573 /****************************************************************************** 565 /******************************************************************************
592 tree); 584 tree);
593 gtk_widget_class_bind_template_child(widget_class, PidginDiscoDialog, 585 gtk_widget_class_bind_template_child(widget_class, PidginDiscoDialog,
594 model); 586 model);
595 gtk_widget_class_bind_template_child(widget_class, PidginDiscoDialog, 587 gtk_widget_class_bind_template_child(widget_class, PidginDiscoDialog,
596 popover); 588 popover);
597 gtk_widget_class_bind_template_child(widget_class, PidginDiscoDialog,
598 popover_menu);
599 589
600 gtk_widget_class_bind_template_callback(widget_class, destroy_win_cb); 590 gtk_widget_class_bind_template_callback(widget_class, destroy_win_cb);
601 gtk_widget_class_bind_template_callback(widget_class, close_button_cb);
602 gtk_widget_class_bind_template_callback(widget_class, 591 gtk_widget_class_bind_template_callback(widget_class,
603 dialog_select_account_cb); 592 dialog_select_account_cb);
604 gtk_widget_class_bind_template_callback(widget_class, row_activated_cb); 593 gtk_widget_class_bind_template_callback(widget_class, row_activated_cb);
605 gtk_widget_class_bind_template_callback(widget_class, row_expanded_cb); 594 gtk_widget_class_bind_template_callback(widget_class, row_expanded_cb);
606 gtk_widget_class_bind_template_callback(widget_class, service_click_cb); 595 gtk_widget_class_bind_template_callback(widget_class, service_click_cb);
658 g_action_map_lookup_action(action_map, "add")); 647 g_action_map_lookup_action(action_map, "add"));
659 g_simple_action_set_enabled(dialog->add_action, FALSE); 648 g_simple_action_set_enabled(dialog->add_action, FALSE);
660 649
661 gtk_widget_insert_action_group(GTK_WIDGET(dialog), "disco", 650 gtk_widget_insert_action_group(GTK_WIDGET(dialog), "disco",
662 G_ACTION_GROUP(action_group)); 651 G_ACTION_GROUP(action_group));
663
664 gtk_popover_bind_model(GTK_POPOVER(dialog->popover), dialog->popover_menu,
665 NULL);
666 } 652 }
667 653
668 /****************************************************************************** 654 /******************************************************************************
669 * Public API 655 * Public API
670 *****************************************************************************/ 656 *****************************************************************************/
677 663
678 PidginDiscoDialog * 664 PidginDiscoDialog *
679 pidgin_disco_dialog_new(void) 665 pidgin_disco_dialog_new(void)
680 { 666 {
681 PidginDiscoDialog *dialog = g_object_new(PIDGIN_TYPE_DISCO_DIALOG, NULL); 667 PidginDiscoDialog *dialog = g_object_new(PIDGIN_TYPE_DISCO_DIALOG, NULL);
682 gtk_widget_show_all(GTK_WIDGET(dialog)); 668 gtk_widget_show(GTK_WIDGET(dialog));
683 return dialog; 669 return dialog;
684 } 670 }
685 671
686 void pidgin_disco_add_service(PidginDiscoList *pdl, XmppDiscoService *service, XmppDiscoService *parent) 672 void pidgin_disco_add_service(PidginDiscoList *pdl, XmppDiscoService *service, XmppDiscoService *parent)
687 { 673 {

mercurial