diff options
author | Mohammed Sadiq <sadiq@sadiqpk.org> | 2017-05-23 16:45:08 +0530 |
---|---|---|
committer | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2017-05-24 10:56:13 -0300 |
commit | 1154658cd96e709d90a3af02a94a294ee5a236ac (patch) | |
tree | 123f6c9f26ef7cb4b1fa702a8d59df2256697745 | |
parent | 4ac4f4a04ebe99be22138e6aeebd2e8dba297f2f (diff) | |
download | gnome-control-center-1154658cd96e709d90a3af02a94a294ee5a236ac.tar.gz |
details: Split default apps as a separate panel
https://bugzilla.gnome.org/show_bug.cgi?id=779216
-rw-r--r-- | panels/info/Makefile.am | 2 | ||||
-rw-r--r-- | panels/info/cc-info-default-apps-panel.c | 214 | ||||
-rw-r--r-- | panels/info/cc-info-default-apps-panel.h | 36 | ||||
-rw-r--r-- | panels/info/cc-info-panel.c | 123 | ||||
-rw-r--r-- | panels/info/info-default-apps.ui | 202 | ||||
-rw-r--r-- | panels/info/info.gresource.xml | 1 | ||||
-rw-r--r-- | panels/info/info.ui | 202 |
7 files changed, 459 insertions, 321 deletions
diff --git a/panels/info/Makefile.am b/panels/info/Makefile.am index 4314def3d..547c9a5d3 100644 --- a/panels/info/Makefile.am +++ b/panels/info/Makefile.am @@ -23,6 +23,8 @@ libinfo_la_SOURCES = \ cc-info-panel.h \ cc-info-overview-panel.c \ cc-info-overview-panel.h \ + cc-info-default-apps-panel.c \ + cc-info-default-apps-panel.h \ gsd-disk-space-helper.h \ gsd-disk-space-helper.c \ info-cleanup.h \ diff --git a/panels/info/cc-info-default-apps-panel.c b/panels/info/cc-info-default-apps-panel.c new file mode 100644 index 000000000..e417ff443 --- /dev/null +++ b/panels/info/cc-info-default-apps-panel.c @@ -0,0 +1,214 @@ +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- + * + * Copyright (C) 2017 Mohammed Sadiq <sadiq@sadiqpk.org> + * Copyright (C) 2010 Red Hat, Inc + * Copyright (C) 2008 William Jon McCann <jmccann@redhat.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <http://www.gnu.org/licenses/>. + * + */ + +#include <config.h> + +#include "cc-info-panel.h" +#include "cc-info-resources.h" +#include "info-cleanup.h" + +#include <glib.h> +#include <glib/gi18n.h> +#include <gio/gio.h> +#include <gio/gunixmounts.h> +#include <gio/gdesktopappinfo.h> + +#include <glibtop/fsusage.h> +#include <glibtop/mountlist.h> +#include <glibtop/mem.h> +#include <glibtop/sysinfo.h> + +#ifdef GDK_WINDOWING_WAYLAND +#include <gdk/gdkwayland.h> +#endif +#ifdef GDK_WINDOWING_X11 +#include <gdk/gdkx.h> +#endif + +#include "gsd-disk-space-helper.h" + +#include "cc-info-default-apps-panel.h" + +typedef struct +{ + const char *content_type; + gint label_offset; + /* A pattern used to filter supported mime types + when changing preferred applications. NULL + means no other types should be changed */ + const char *extra_type_filter; +} DefaultAppData; + +struct _CcInfoDefaultAppsPanel +{ + GtkBox parent_instance; + + GtkWidget *default_apps_grid; + + GtkWidget *web_label; + GtkWidget *mail_label; + GtkWidget *calendar_label; + GtkWidget *music_label; + GtkWidget *video_label; + GtkWidget *photos_label; +}; + + +G_DEFINE_TYPE (CcInfoDefaultAppsPanel, cc_info_default_apps_panel, GTK_TYPE_BOX) + +static void +default_app_changed (GtkAppChooserButton *button, + CcInfoDefaultAppsPanel *self) +{ + GAppInfo *info; + GError *error = NULL; + DefaultAppData *app_data; + int i; + + info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (button)); + app_data = g_object_get_data (G_OBJECT (button), "cc-default-app-data"); + + if (g_app_info_set_as_default_for_type (info, app_data->content_type, &error) == FALSE) + { + g_warning ("Failed to set '%s' as the default application for '%s': %s", + g_app_info_get_name (info), app_data->content_type, error->message); + g_error_free (error); + error = NULL; + } + else + { + g_debug ("Set '%s' as the default handler for '%s'", + g_app_info_get_name (info), app_data->content_type); + } + + if (app_data->extra_type_filter) + { + const char *const *mime_types; + GPatternSpec *pattern; + + pattern = g_pattern_spec_new (app_data->extra_type_filter); + mime_types = g_app_info_get_supported_types (info); + + for (i = 0; mime_types && mime_types[i]; i++) + { + if (!g_pattern_match_string (pattern, mime_types[i])) + continue; + + if (g_app_info_set_as_default_for_type (info, mime_types[i], &error) == FALSE) + { + g_warning ("Failed to set '%s' as the default application for secondary " + "content type '%s': %s", + g_app_info_get_name (info), mime_types[i], error->message); + g_error_free (error); + } + else + { + g_debug ("Set '%s' as the default handler for '%s'", + g_app_info_get_name (info), mime_types[i]); + } + } + + g_pattern_spec_free (pattern); + } + + g_object_unref (info); +} + +#define OFFSET(x) (G_STRUCT_OFFSET (CcInfoDefaultAppsPanel, x)) +#define WIDGET_FROM_OFFSET(x) (G_STRUCT_MEMBER (GtkWidget*, self, x)) + +static void +info_panel_setup_default_app (CcInfoDefaultAppsPanel *self, + DefaultAppData *data, + guint left_attach, + guint top_attach) +{ + GtkWidget *button; + GtkWidget *label; + + button = gtk_app_chooser_button_new (data->content_type); + 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); + g_signal_connect (G_OBJECT (button), "changed", + G_CALLBACK (default_app_changed), self); + gtk_widget_show (button); + + label = WIDGET_FROM_OFFSET (data->label_offset); + gtk_label_set_mnemonic_widget (GTK_LABEL (label), button); +} + +static DefaultAppData preferred_app_infos[] = { + /* for web, we need to support text/html, + application/xhtml+xml and x-scheme-handler/https, + hence the "*" pattern + */ + { "x-scheme-handler/http", OFFSET (web_label), "*" }, + { "x-scheme-handler/mailto", OFFSET (mail_label), NULL }, + { "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/*" } +}; + +static void +info_panel_setup_default_apps (CcInfoDefaultAppsPanel *self) +{ + int i; + + for (i = 0; i < G_N_ELEMENTS (preferred_app_infos); i++) + { + info_panel_setup_default_app (self, &preferred_app_infos[i], + 1, i); + } +} + +static void +cc_info_default_apps_panel_class_init (CcInfoDefaultAppsPanelClass *klass) +{ + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/info/info-default-apps.ui"); + gtk_widget_class_bind_template_child (widget_class, CcInfoDefaultAppsPanel, default_apps_grid); + gtk_widget_class_bind_template_child (widget_class, CcInfoDefaultAppsPanel, web_label); + gtk_widget_class_bind_template_child (widget_class, CcInfoDefaultAppsPanel, mail_label); + gtk_widget_class_bind_template_child (widget_class, CcInfoDefaultAppsPanel, calendar_label); + gtk_widget_class_bind_template_child (widget_class, CcInfoDefaultAppsPanel, music_label); + gtk_widget_class_bind_template_child (widget_class, CcInfoDefaultAppsPanel, video_label); + gtk_widget_class_bind_template_child (widget_class, CcInfoDefaultAppsPanel, photos_label); +} + +static void +cc_info_default_apps_panel_init (CcInfoDefaultAppsPanel *self) +{ + gtk_widget_init_template (GTK_WIDGET (self)); + + info_panel_setup_default_apps (self); +} + +GtkWidget * +cc_info_default_apps_panel_new (void) +{ + return g_object_new (CC_TYPE_INFO_DEFAULT_APPS_PANEL, + NULL); +} diff --git a/panels/info/cc-info-default-apps-panel.h b/panels/info/cc-info-default-apps-panel.h new file mode 100644 index 000000000..cafdbe4b0 --- /dev/null +++ b/panels/info/cc-info-default-apps-panel.h @@ -0,0 +1,36 @@ +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- + * + * Copyright (C) 2017 Mohammed Sadiq <sadiq@sadiqpk.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <http://www.gnu.org/licenses/>. + * + */ + +#ifndef CC_INFO_DEFAULT_APPS_PANEL_H +#define CC_INFO_DEFAULT_APPS_PANEL_H + +#include <gtk/gtk.h> + +G_BEGIN_DECLS + +#define CC_TYPE_INFO_DEFAULT_APPS_PANEL (cc_info_default_apps_panel_get_type ()) + +G_DECLARE_FINAL_TYPE (CcInfoDefaultAppsPanel, cc_info_default_apps_panel, CC, INFO_DEFAULT_APPS_PANEL, GtkBox) + +GtkWidget *cc_info_default_apps_panel_new (void); + + +G_END_DECLS + +#endif /* CC_INFO_DEFAULT_APPS_PANEL_H */ diff --git a/panels/info/cc-info-panel.c b/panels/info/cc-info-panel.c index 6def9b353..0df2f027b 100644 --- a/panels/info/cc-info-panel.c +++ b/panels/info/cc-info-panel.c @@ -22,6 +22,7 @@ #include "cc-info-panel.h" #include "cc-info-overview-panel.h" +#include "cc-info-default-apps-panel.h" #include "cc-info-resources.h" #include "info-cleanup.h" @@ -64,16 +65,6 @@ CC_PANEL_REGISTER (CcInfoPanel, cc_info_panel) #define INFO_PANEL_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), CC_TYPE_INFO_PANEL, CcInfoPanelPrivate)) -typedef struct -{ - const char *content_type; - const char *label; - /* A pattern used to filter supported mime types - when changing preferred applications. NULL - means no other types should be changed */ - const char *extra_type_filter; -} DefaultAppData; - struct _CcInfoPanelPrivate { GtkBuilder *builder; @@ -120,6 +111,7 @@ cc_info_panel_class_init (CcInfoPanelClass *klass) object_class->finalize = cc_info_panel_finalize; g_type_ensure (CC_TYPE_INFO_OVERVIEW_PANEL); + g_type_ensure (CC_TYPE_INFO_DEFAULT_APPS_PANEL); } static void @@ -149,116 +141,6 @@ on_section_changed (GtkTreeSelection *selection, gtk_tree_path_free (path); } - -static void -default_app_changed (GtkAppChooserButton *button, - CcInfoPanel *self) -{ - GAppInfo *info; - GError *error = NULL; - DefaultAppData *app_data; - int i; - - info = gtk_app_chooser_get_app_info (GTK_APP_CHOOSER (button)); - app_data = g_object_get_data (G_OBJECT (button), "cc-default-app-data"); - - if (g_app_info_set_as_default_for_type (info, app_data->content_type, &error) == FALSE) - { - g_warning ("Failed to set '%s' as the default application for '%s': %s", - g_app_info_get_name (info), app_data->content_type, error->message); - g_error_free (error); - error = NULL; - } - else - { - g_debug ("Set '%s' as the default handler for '%s'", - g_app_info_get_name (info), app_data->content_type); - } - - if (app_data->extra_type_filter) - { - const char *const *mime_types; - GPatternSpec *pattern; - - pattern = g_pattern_spec_new (app_data->extra_type_filter); - mime_types = g_app_info_get_supported_types (info); - - for (i = 0; mime_types && mime_types[i]; i++) - { - if (!g_pattern_match_string (pattern, mime_types[i])) - continue; - - if (g_app_info_set_as_default_for_type (info, mime_types[i], &error) == FALSE) - { - g_warning ("Failed to set '%s' as the default application for secondary " - "content type '%s': %s", - g_app_info_get_name (info), mime_types[i], error->message); - g_error_free (error); - } - else - { - g_debug ("Set '%s' as the default handler for '%s'", - g_app_info_get_name (info), mime_types[i]); - } - } - - g_pattern_spec_free (pattern); - } - - g_object_unref (info); -} - -static void -info_panel_setup_default_app (CcInfoPanel *self, - DefaultAppData *data, - guint left_attach, - guint top_attach) -{ - GtkWidget *button; - GtkWidget *grid; - GtkWidget *label; - - grid = WID ("default_apps_grid"); - - button = gtk_app_chooser_button_new (data->content_type); - 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 (grid), button, left_attach, top_attach, - 1, 1); - g_signal_connect (G_OBJECT (button), "changed", - G_CALLBACK (default_app_changed), self); - gtk_widget_show (button); - - label = WID(data->label); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), button); -} - -static DefaultAppData preferred_app_infos[] = { - /* for web, we need to support text/html, - application/xhtml+xml and x-scheme-handler/https, - hence the "*" pattern - */ - { "x-scheme-handler/http", "web-label", "*" }, - { "x-scheme-handler/mailto", "mail-label", NULL }, - { "text/calendar", "calendar-label", NULL }, - { "audio/x-vorbis+ogg", "music-label", "audio/*" }, - { "video/x-ogm+ogg", "video-label", "video/*" }, - { "image/jpeg", "photos-label", "image/*" } -}; - -static void -info_panel_setup_default_apps (CcInfoPanel *self) -{ - int i; - - for (i = 0; i < G_N_ELEMENTS(preferred_app_infos); i++) - { - info_panel_setup_default_app (self, &preferred_app_infos[i], - 1, i); - } -} - static char ** remove_elem_from_str_array (char **v, const char *s) @@ -825,6 +707,5 @@ cc_info_panel_init (CcInfoPanel *self) info_panel_setup_selector (self); info_panel_setup_overview (self); - info_panel_setup_default_apps (self); info_panel_setup_media (self); } diff --git a/panels/info/info-default-apps.ui b/panels/info/info-default-apps.ui new file mode 100644 index 000000000..c8f91a177 --- /dev/null +++ b/panels/info/info-default-apps.ui @@ -0,0 +1,202 @@ +<?xml version="1.0" encoding="UTF-8"?> +<interface> + <!-- interface-requires gtk+ 3.0 --> + <template class="CcInfoDefaultAppsPanel" parent="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">center</property> + <property name="valign">start</property> + <property name="border_width">20</property> + <property name="spacing">10</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkGrid" id="default_apps_grid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="column_spacing">12</property> + <property name="row_spacing">12</property> + <child> + <object class="GtkLabel" id="web_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">_Web</property> + <property name="use_underline">True</property> + <style> + <class name="dim-label"/> + </style> + </object> + </child> + <child> + <object class="GtkLabel" id="mail_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">_Mail</property> + <property name="use_underline">True</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="top_attach">1</property> + <property name="left_attach">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="calendar_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">_Calendar</property> + <property name="use_underline">True</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="top_attach">2</property> + <property name="left_attach">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="music_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">M_usic</property> + <property name="use_underline">True</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="top_attach">3</property> + <property name="left_attach">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="video_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">_Video</property> + <property name="use_underline">True</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="top_attach">4</property> + <property name="left_attach">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label25"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label"> </property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label26"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label"> </property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label27"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label"> </property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label28"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label"> </property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label29"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label"> </property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">4</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="photos_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">_Photos</property> + <property name="use_underline">True</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="top_attach">5</property> + <property name="left_attach">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label33"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label"> </property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">5</property> + </packing> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + </template> +</interface> diff --git a/panels/info/info.gresource.xml b/panels/info/info.gresource.xml index d371dbc5b..ae80be42c 100644 --- a/panels/info/info.gresource.xml +++ b/panels/info/info.gresource.xml @@ -3,6 +3,7 @@ <gresource prefix="/org/gnome/control-center/info"> <file preprocess="xml-stripblanks">info.ui</file> <file preprocess="xml-stripblanks">info-overview.ui</file> + <file preprocess="xml-stripblanks">info-default-apps.ui</file> <file>GnomeLogoVerticalMedium.svg</file> </gresource> </gresources> diff --git a/panels/info/info.ui b/panels/info/info.ui index d0843e84f..a050230d9 100644 --- a/panels/info/info.ui +++ b/panels/info/info.ui @@ -206,207 +206,9 @@ </packing> </child> <child> - <object class="GtkBox" id="default_apps_container"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">center</property> - <property name="valign">start</property> - <property name="border_width">20</property> - <property name="spacing">10</property> - <property name="orientation">vertical</property> - <child> - <object class="GtkGrid" id="default_apps_grid"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="column_spacing">12</property> - <property name="row_spacing">12</property> - <child> - <object class="GtkLabel" id="web-label"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">_Web</property> - <property name="use_underline">True</property> - <style> - <class name="dim-label"/> - </style> - </object> - </child> - <child> - <object class="GtkLabel" id="mail-label"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">_Mail</property> - <property name="use_underline">True</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="top_attach">1</property> - <property name="left_attach">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="calendar-label"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">_Calendar</property> - <property name="use_underline">True</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="top_attach">2</property> - <property name="left_attach">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="music-label"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">M_usic</property> - <property name="use_underline">True</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="top_attach">3</property> - <property name="left_attach">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="video-label"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">_Video</property> - <property name="use_underline">True</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="top_attach">4</property> - <property name="left_attach">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label25"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label"> </property> - </object> - <packing> - <property name="left_attach">2</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label26"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label"> </property> - </object> - <packing> - <property name="left_attach">2</property> - <property name="top_attach">1</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label27"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label"> </property> - </object> - <packing> - <property name="left_attach">2</property> - <property name="top_attach">2</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label28"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label"> </property> - </object> - <packing> - <property name="left_attach">2</property> - <property name="top_attach">3</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label29"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label"> </property> - </object> - <packing> - <property name="left_attach">2</property> - <property name="top_attach">4</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="photos-label"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">_Photos</property> - <property name="use_underline">True</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="top_attach">5</property> - <property name="left_attach">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label33"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label"> </property> - </object> - <packing> - <property name="left_attach">2</property> - <property name="top_attach">5</property> - </packing> - </child> - <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> + <object class="CcInfoDefaultAppsPanel" id="default_apps_container"> + <property name="visible">true</property> </object> - <packing> - <property name="position">1</property> - </packing> </child> <child type="tab"> <object class="GtkLabel" id="label3"> |