X-Git-Url: https://git.0d.be/?p=empathy.git;a=blobdiff_plain;f=src%2Fempathy-main-window.c;h=0e75b1cbe07e4abba421779f973c36114dafd986;hp=a9e76a286dfade1e653ebc0e95899e1be3bac718;hb=378393285bb5de21c4da85b2e64e044faef6f5b6;hpb=8944f13286ba5293781f2d57980da284cb2aa29d diff --git a/src/empathy-main-window.c b/src/empathy-main-window.c index a9e76a28..0e75b1cb 100644 --- a/src/empathy-main-window.c +++ b/src/empathy-main-window.c @@ -901,7 +901,7 @@ static void main_window_balance_update_balance (GtkAction *action, TpConnection *conn) { - TpAccount *account = g_object_get_data (G_OBJECT (action), "account"); + TpAccount *account = tp_connection_get_account (conn); GtkWidget *label; int amount = 0; guint scale = G_MAXINT32; @@ -977,7 +977,6 @@ main_window_setup_balance_create_action (EmpathyMainWindow *window, g_object_bind_property (account, "icon-name", action, "icon-name", G_BINDING_SYNC_CREATE); - g_object_set_data (G_OBJECT (action), "account", account); g_signal_connect (action, "activate", G_CALLBACK (main_window_balance_activate_cb), window); @@ -1016,15 +1015,12 @@ main_window_setup_balance_create_action (EmpathyMainWindow *window, static GtkWidget * main_window_setup_balance_create_widget (EmpathyMainWindow *window, - GtkAction *action) + GtkAction *action, + TpAccount *account) { EmpathyMainWindowPriv *priv = GET_PRIV (window); - TpAccount *account; GtkWidget *hbox, *image, *label, *button; - account = g_object_get_data (G_OBJECT (action), "account"); - g_return_val_if_fail (TP_IS_ACCOUNT (account), NULL); - hbox = gtk_hbox_new (FALSE, 6); /* protocol icon */ @@ -1063,24 +1059,16 @@ main_window_setup_balance_create_widget (EmpathyMainWindow *window, } static void -main_window_setup_balance_conn_ready (GObject *source, - GAsyncResult *result, - gpointer user_data) +main_window_setup_balance (EmpathyMainWindow *window, + TpAccount *account) { - EmpathyMainWindow *window = user_data; EmpathyMainWindowPriv *priv = GET_PRIV (window); - TpConnection *conn = TP_CONNECTION (source); - TpAccount *account = g_object_get_data (source, "account"); + TpConnection *conn = tp_account_get_connection (account); GtkAction *action; - GError *error = NULL; const gchar *uri; - if (!tp_proxy_prepare_finish (conn, result, &error)) { - DEBUG ("Failed to prepare connection: %s", error->message); - - g_error_free (error); + if (conn == NULL) return; - } if (!tp_proxy_is_prepared (conn, TP_CONNECTION_FEATURE_BALANCE)) return; @@ -1097,7 +1085,7 @@ main_window_setup_balance_conn_ready (GObject *source, gtk_action_set_visible (priv->view_balance_show_in_roster, TRUE); /* create the display widget */ - main_window_setup_balance_create_widget (window, action); + main_window_setup_balance_create_widget (window, action, account); /* check the current balance and monitor for any changes */ uri = tp_connection_get_balance_uri (conn); @@ -1110,23 +1098,7 @@ main_window_setup_balance_conn_ready (GObject *source, g_signal_connect (conn, "balance-changed", G_CALLBACK (main_window_balance_changed_cb), action); -} -static void -main_window_setup_balance (EmpathyMainWindow *window, - TpAccount *account) -{ - TpConnection *conn = tp_account_get_connection (account); - GQuark features[] = { TP_CONNECTION_FEATURE_BALANCE, 0 }; - - if (conn == NULL) - return; - - /* need to prepare the connection: - * store the account on the connection */ - g_object_set_data (G_OBJECT (conn), "account", account); - tp_proxy_prepare_async (conn, features, - main_window_setup_balance_conn_ready, window); } static void @@ -1875,9 +1847,9 @@ main_window_edit_blocked_contacts_cb (GtkAction *action, G_CALLBACK (gtk_widget_destroy), NULL); } -static void -main_window_edit_preferences_cb (GtkAction *action, - EmpathyMainWindow *window) +void +empathy_main_window_show_preferences (EmpathyMainWindow *window, + const gchar *tab) { EmpathyMainWindowPriv *priv = GET_PRIV (window); @@ -1890,6 +1862,17 @@ main_window_edit_preferences_cb (GtkAction *action, } else { gtk_window_present (GTK_WINDOW (priv->preferences)); } + + if (tab != NULL) + empathy_preferences_show_tab ( + EMPATHY_PREFERENCES (priv->preferences), tab); +} + +static void +main_window_edit_preferences_cb (GtkAction *action, + EmpathyMainWindow *window) +{ + empathy_main_window_show_preferences (window, NULL); } static void @@ -1903,42 +1886,7 @@ static void main_window_help_debug_cb (GtkAction *action, EmpathyMainWindow *window) { - GdkDisplay *display; - GError *error = NULL; - gchar *path; - GAppInfo *app_info; - GdkAppLaunchContext *context = NULL; - - /* Try to run from source directory if possible */ - path = g_build_filename (g_getenv ("EMPATHY_SRCDIR"), "src", - "empathy-debugger", NULL); - - if (!g_file_test (path, G_FILE_TEST_EXISTS)) { - g_free (path); - path = g_build_filename (BIN_DIR, "empathy-debugger", NULL); - } - - app_info = g_app_info_create_from_commandline (path, NULL, 0, &error); - if (app_info == NULL) { - DEBUG ("Failed to create app info: %s", error->message); - g_error_free (error); - goto out; - } - - display = gdk_display_get_default (); - context = gdk_display_get_app_launch_context (display); - - if (!g_app_info_launch (app_info, NULL, (GAppLaunchContext *) context, - &error)) { - g_warning ("Failed to open debug window: %s", error->message); - g_error_free (error); - goto out; - } - -out: - tp_clear_object (&app_info); - tp_clear_object (&context); - g_free (path); + empathy_launch_program (BIN_DIR, "empathy-debugger", NULL); } static void @@ -2036,9 +1984,11 @@ main_window_connection_items_setup (EmpathyMainWindow *window, "room_join_favorites", "chat_new_message", "chat_new_call", + "chat_search_contacts", "chat_add_contact", "edit_personal_information", - "edit_blocked_contacts" + "edit_blocked_contacts", + "edit_search_contacts" }; for (i = 0, list = NULL; i < G_N_ELEMENTS (actions_connected); i++) { @@ -2148,7 +2098,7 @@ empathy_main_window_init (EmpathyMainWindow *window) { EmpathyMainWindowPriv *priv; EmpathyIndividualManager *individual_manager; - GtkBuilder *gui; + GtkBuilder *gui, *gui_mgr; GtkWidget *sw; GtkToggleAction *show_offline_widget; GtkAction *show_map_widget; @@ -2157,6 +2107,8 @@ empathy_main_window_init (EmpathyMainWindow *window) gchar *filename; GSList *l; GtkTreeModel *model; + GtkWidget *search_vbox; + GtkWidget *menubar; priv = window->priv = G_TYPE_INSTANCE_GET_PRIVATE (window, EMPATHY_TYPE_MAIN_WINDOW, EmpathyMainWindowPriv); @@ -2170,6 +2122,10 @@ empathy_main_window_init (EmpathyMainWindow *window) gtk_window_set_role (GTK_WINDOW (window), "contact_list"); gtk_window_set_default_size (GTK_WINDOW (window), 225, 325); + /* don't finalize the widget on delete-event, just hide it */ + g_signal_connect (window, "delete-event", + G_CALLBACK (gtk_widget_hide_on_delete), NULL); + /* Set up interface */ filename = empathy_file_lookup ("empathy-main-window.ui", "src"); gui = empathy_builder_get_file (filename, @@ -2177,6 +2133,17 @@ empathy_main_window_init (EmpathyMainWindow *window) "balance_vbox", &priv->balance_vbox, "errors_vbox", &priv->errors_vbox, "auth_vbox", &priv->auth_vbox, + "search_vbox", &search_vbox, + "presence_toolbar", &priv->presence_toolbar, + "notebook", &priv->notebook, + "no_entry_label", &priv->no_entry_label, + "roster_scrolledwindow", &sw, + NULL); + g_free (filename); + + /* Set UI manager */ + filename = empathy_file_lookup ("empathy-main-window-menubar.ui", "src"); + gui_mgr = empathy_builder_get_file (filename, "ui_manager", &priv->ui_manager, "view_show_offline", &show_offline_widget, "view_show_protocols", &priv->show_protocols, @@ -2188,21 +2155,24 @@ empathy_main_window_init (EmpathyMainWindow *window) "view_history", &priv->view_history, "view_show_map", &show_map_widget, "room_join_favorites", &priv->room_join_favorites, - "presence_toolbar", &priv->presence_toolbar, - "notebook", &priv->notebook, - "no_entry_label", &priv->no_entry_label, - "roster_scrolledwindow", &sw, "view_balance_show_in_roster", &priv->view_balance_show_in_roster, + "menubar", &menubar, NULL); g_free (filename); + /* The UI manager is living in its own .ui file as Glade doesn't support + * those. The GtkMenubar has to be in this file as well to we manually add + * it to the first position of the vbox. */ + gtk_box_pack_start (GTK_BOX (priv->main_vbox), menubar, FALSE, FALSE, 0); + gtk_box_reorder_child (GTK_BOX (priv->main_vbox), menubar, 0); + gtk_container_add (GTK_CONTAINER (window), priv->main_vbox); gtk_widget_show (priv->main_vbox); g_signal_connect (window, "key-press-event", G_CALLBACK (main_window_key_press_event_cb), NULL); - empathy_builder_connect (gui, window, + empathy_builder_connect (gui_mgr, window, "chat_quit", "activate", main_window_chat_quit_cb, "chat_new_message", "activate", main_window_chat_new_message_cb, "chat_new_call", "activate", main_window_chat_new_call_cb, @@ -2230,10 +2200,11 @@ empathy_main_window_init (EmpathyMainWindow *window) NULL); /* Set up connection related widgets. */ - main_window_connection_items_setup (window, gui); + main_window_connection_items_setup (window, gui_mgr); g_object_ref (priv->ui_manager); g_object_unref (gui); + g_object_unref (gui_mgr); #ifndef HAVE_LIBCHAMPLAIN gtk_action_set_visible (show_map_widget, FALSE); @@ -2284,7 +2255,6 @@ empathy_main_window_init (EmpathyMainWindow *window) /* Set up the throbber */ priv->throbber = gtk_spinner_new (); gtk_widget_set_size_request (priv->throbber, 16, -1); - gtk_widget_set_tooltip_text (priv->throbber, _("Show and edit accounts")); gtk_widget_set_events (priv->throbber, GDK_BUTTON_PRESS_MASK); g_signal_connect (priv->throbber, "button-press-event", G_CALLBACK (main_window_throbber_button_press_event_cb), @@ -2332,8 +2302,9 @@ empathy_main_window_init (EmpathyMainWindow *window) GTK_WIDGET (priv->individual_view)); empathy_individual_view_set_live_search (priv->individual_view, EMPATHY_LIVE_SEARCH (priv->search_bar)); - gtk_box_pack_start (GTK_BOX (priv->main_vbox), priv->search_bar, + gtk_box_pack_start (GTK_BOX (search_vbox), priv->search_bar, FALSE, TRUE, 0); + g_signal_connect_swapped (window, "map", G_CALLBACK (gtk_widget_grab_focus), priv->individual_view);