diff --git a/meson.build b/meson.build index 149b18713963514e5f5e13e83acc87c7e61161db..bfc61be6698b342d52d3570cfcfbd1a88d99a668 100644 --- a/meson.build +++ b/meson.build @@ -222,10 +222,11 @@ config_h.set('HAVE_MALCONTENT', enable_malcontent, if host_is_linux # network manager + mm_dep = dependency('mm-glib', version: '>= 0.7') network_manager_deps = [ dependency('libnm', version: '>= 1.24.0'), dependency('libnma-gtk4', version: '>= 1.8.0'), - dependency('mm-glib', version: '>= 0.7') + mm_dep, ] endif config_h.set('BUILD_NETWORK', host_is_linux, diff --git a/panels/default-apps/cc-default-apps-panel.c b/panels/default-apps/cc-default-apps-panel.c index 5949fab7295c22c6f476d5c1ae0fcc9e663d313d..95da3e70af02f58f56efbe49129b7be38cfd3f0c 100644 --- a/panels/default-apps/cc-default-apps-panel.c +++ b/panels/default-apps/cc-default-apps-panel.c @@ -20,10 +20,15 @@ */ #include +#ifdef BUILD_WWAN +#include +#endif #include "cc-default-apps-panel.h" #include "cc-default-apps-resources.h" +#include "shell/cc-object-storage.h" + typedef struct { const char *content_type; @@ -46,6 +51,12 @@ struct _CcDefaultAppsPanel GtkWidget *music_label; GtkWidget *video_label; GtkWidget *photos_label; + GtkWidget *calls_label; + GtkWidget *sms_label; + +#ifdef BUILD_WWAN + MMManager *mm_manager; +#endif }; @@ -125,8 +136,8 @@ default_app_changed (CcDefaultAppsPanel *self, static void info_panel_setup_default_app (CcDefaultAppsPanel *self, DefaultAppData *data, - guint left_attach, - guint top_attach) + guint column, + guint row) { GtkWidget *button; GtkWidget *label; @@ -135,13 +146,14 @@ info_panel_setup_default_app (CcDefaultAppsPanel *self, g_object_set_data (G_OBJECT (button), "cc-default-app-data", data); gtk_app_chooser_button_set_show_default_item (GTK_APP_CHOOSER_BUTTON (button), TRUE); - gtk_grid_attach (GTK_GRID (self->default_apps_grid), button, left_attach, top_attach, - 1, 1); + gtk_grid_attach (GTK_GRID (self->default_apps_grid), button, column, row, 1, 1); g_signal_connect_object (G_OBJECT (button), "changed", G_CALLBACK (default_app_changed), self, G_CONNECT_SWAPPED); label = WIDGET_FROM_OFFSET (data->label_offset); gtk_label_set_mnemonic_widget (GTK_LABEL (label), button); + + g_object_bind_property (G_OBJECT (label), "visible", G_OBJECT (button), "visible", G_BINDING_SYNC_CREATE); } static DefaultAppData preferred_app_infos[] = { @@ -150,7 +162,9 @@ static DefaultAppData preferred_app_infos[] = { { "text/calendar", OFFSET (calendar_label), NULL }, { "audio/x-vorbis+ogg", OFFSET (music_label), "audio/*" }, { "video/x-ogm+ogg", OFFSET (video_label), "video/*" }, - { "image/jpeg", OFFSET (photos_label), "image/*" } + { "image/jpeg", OFFSET (photos_label), "image/*" }, + { "x-scheme-handler/tel", OFFSET(calls_label), NULL}, + { "x-scheme-handler/sms", OFFSET(sms_label), NULL}, }; static void @@ -165,6 +179,43 @@ info_panel_setup_default_apps (CcDefaultAppsPanel *self) } } +#ifdef BUILD_WWAN +static void +update_modem_apps_visibility (CcDefaultAppsPanel *self) +{ + GList *devices; + GtkWidget *calls_button; + GtkWidget *sms_button; + int count, row; + + devices = g_dbus_object_manager_get_objects (G_DBUS_OBJECT_MANAGER (self->mm_manager)); + count = g_list_length (devices); + + gtk_grid_query_child (GTK_GRID (self->default_apps_grid), self->calls_label, NULL, &row, NULL, NULL); + calls_button = gtk_grid_get_child_at (GTK_GRID (self->default_apps_grid), 1, row); + + gtk_grid_query_child (GTK_GRID (self->default_apps_grid), self->sms_label, NULL, &row, NULL, NULL); + sms_button = gtk_grid_get_child_at (GTK_GRID (self->default_apps_grid), 1, row); + + if (count > 0) + { + gtk_widget_show (self->calls_label); + gtk_widget_show (self->sms_label); + gtk_widget_show (calls_button); + gtk_widget_show (sms_button); + } + else + { + gtk_widget_hide (self->calls_label); + gtk_widget_hide (self->sms_label); + gtk_widget_hide (calls_button); + gtk_widget_hide (sms_button); + } + + g_list_free_full (devices, (GDestroyNotify)g_object_unref); +} +#endif + static void cc_default_apps_panel_class_init (CcDefaultAppsPanelClass *klass) { @@ -178,6 +229,8 @@ cc_default_apps_panel_class_init (CcDefaultAppsPanelClass *klass) gtk_widget_class_bind_template_child (widget_class, CcDefaultAppsPanel, music_label); gtk_widget_class_bind_template_child (widget_class, CcDefaultAppsPanel, video_label); gtk_widget_class_bind_template_child (widget_class, CcDefaultAppsPanel, photos_label); + gtk_widget_class_bind_template_child (widget_class, CcDefaultAppsPanel, calls_label); + gtk_widget_class_bind_template_child (widget_class, CcDefaultAppsPanel, sms_label); } static void @@ -188,6 +241,20 @@ cc_default_apps_panel_init (CcDefaultAppsPanel *self) gtk_widget_init_template (GTK_WIDGET (self)); info_panel_setup_default_apps (self); + +#ifdef BUILD_WWAN + if (cc_object_storage_has_object ("CcObjectStorage::mm-manager")) + { + self->mm_manager = cc_object_storage_get_object ("CcObjectStorage::mm-manager"); + + g_signal_connect_swapped (self->mm_manager, "object-added", + G_CALLBACK (update_modem_apps_visibility), self); + g_signal_connect_swapped (self->mm_manager, "object-removed", + G_CALLBACK (update_modem_apps_visibility), self); + + update_modem_apps_visibility (self); + } +#endif } GtkWidget * diff --git a/panels/default-apps/cc-default-apps-panel.ui b/panels/default-apps/cc-default-apps-panel.ui index ac8db762a658bf15153086a5cdf983b3c98a1996..7327f07ace4919198663c4e1fcc71b1cc09835bd 100644 --- a/panels/default-apps/cc-default-apps-panel.ui +++ b/panels/default-apps/cc-default-apps-panel.ui @@ -84,57 +84,27 @@ - - - - 2 - 0 - - - - - - - - 2 - 1 - - - - - - - - 2 - 2 - - - - - - - - 2 - 3 - - - - - - + + 1 + _Photos + True - 2 - 4 + 5 + 0 + - + 1 - _Photos + Ca_lls True + False - 5 + 6 0 diff --git a/panels/default-apps/meson.build b/panels/default-apps/meson.build index 22a57da4ab43be48685dd5381bc0d6013a25a8c9..89283ce06f6262bb5baace917103f26df478378c 100644 --- a/panels/default-apps/meson.build +++ b/panels/default-apps/meson.build @@ -1,6 +1,11 @@ panels_list += cappletname desktop = 'gnome-@0@-panel.desktop'.format(cappletname) +deps = common_deps +if host_is_linux + deps += mm_dep +endif + i18n.merge_file( type: 'desktop', input: desktop + '.in', @@ -30,7 +35,7 @@ panels_libs += static_library( cappletname, sources: sources, include_directories: [ top_inc, common_inc ], - dependencies: common_deps, + dependencies: deps, c_args: cflags )