~ubuntu-branches/ubuntu/utopic/unity-control-center/utopic

« back to all changes in this revision

Viewing changes to panels/info/cc-info-panel.c

  • Committer: Package Import Robot
  • Author(s): Ubuntu daily release, Sebastien Bacher, Iain Lane, Marco Trevisan (Treviño)
  • Date: 2014-02-20 18:22:53 UTC
  • mfrom: (1.1.6)
  • Revision ID: package-import@ubuntu.com-20140220182253-o27pui1ets2y3rvv
Tags: 14.04.3+14.04.20140220.1-0ubuntu1
[ Sebastien Bacher ]
* info: backport fixes and cleanings from gnome-3-8
* [bluetooth] backport some upstream changes

[ Iain Lane ]
* gsettings-ubuntu-schemas should be in Depends, not Build Depends

[ Marco Trevisan (Treviño) ]
* Appearance: Add Application Menu settings to Unity behaviour tab

Show diffs side-by-side

added added

removed removed

Lines of Context:
100
100
  char          *gnome_distributor;
101
101
  char          *gnome_date;
102
102
  UpdatesState   updates_state;
103
 
  gboolean       is_fallback;
104
103
 
105
104
  /* Free space */
106
105
  GList         *primary_mounts;
115
114
  GDBusProxy          *pk_proxy;
116
115
  GDBusProxy          *pk_transaction_proxy;
117
116
  GDBusProxy          *hostnamed_proxy;
118
 
  GSettings           *session_settings;
119
117
 
120
118
  GraphicsData  *graphics_data;
121
119
};
431
429
      tmp = g_match_info_fetch (match, 1);
432
430
      pretty_tmp = prettify_info (tmp);
433
431
      g_free (tmp);
434
 
      /* Translators: VESA is an techncial acronym, don't translate it. */
435
 
      result = g_strdup_printf (_("VESA: %s"), pretty_tmp); 
 
432
      result = g_strdup_printf ("VESA: %s", pretty_tmp);
436
433
      g_free (pretty_tmp);
437
434
    }
 
435
  g_free (log_contents);
438
436
  g_match_info_free (match);
439
437
  g_regex_unref (re);
440
438
 
461
459
  return result;
462
460
}
463
461
 
464
 
static gboolean
465
 
get_current_is_fallback (CcInfoPanel  *self)
466
 
{
467
 
  GError   *error;
468
 
  GVariant *reply;
469
 
  GVariant *reply_str;
470
 
  gboolean  is_fallback;
471
 
 
472
 
  error = NULL;
473
 
  if (!(reply = g_dbus_connection_call_sync (self->priv->session_bus,
474
 
                                             "org.gnome.SessionManager",
475
 
                                             "/org/gnome/SessionManager",
476
 
                                             "org.freedesktop.DBus.Properties",
477
 
                                             "Get",
478
 
                                             g_variant_new ("(ss)", "org.gnome.SessionManager", "session-name"),
479
 
                                             (GVariantType*)"(v)",
480
 
                                             0,
481
 
                                             -1,
482
 
                                             NULL, &error)))
483
 
    {
484
 
      g_warning ("Failed to get fallback mode: %s", error->message);
485
 
      g_clear_error (&error);
486
 
      return FALSE;
487
 
    }
488
 
 
489
 
  g_variant_get (reply, "(v)", &reply_str);
490
 
  is_fallback = g_strcmp0 ("gnome-fallback", g_variant_get_string (reply_str, NULL)) == 0;
491
 
  g_variant_unref (reply_str);
492
 
  g_variant_unref (reply);
493
 
 
494
 
  return is_fallback;
495
 
}
496
 
 
497
 
static void
498
 
cc_info_panel_get_property (GObject    *object,
499
 
                            guint       property_id,
500
 
                            GValue     *value,
501
 
                            GParamSpec *pspec)
502
 
{
503
 
  switch (property_id)
504
 
    {
505
 
    default:
506
 
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
507
 
    }
508
 
}
509
 
 
510
 
static void
511
 
cc_info_panel_set_property (GObject      *object,
512
 
                            guint         property_id,
513
 
                            const GValue *value,
514
 
                            GParamSpec   *pspec)
515
 
{
516
 
  switch (property_id)
517
 
    {
518
 
    default:
519
 
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
520
 
    }
521
 
}
522
 
 
523
462
static void
524
463
cc_info_panel_dispose (GObject *object)
525
464
{
557
496
{
558
497
  CcInfoPanelPrivate *priv = CC_INFO_PANEL (object)->priv;
559
498
 
560
 
  if (priv->cancellable != NULL)
561
 
    {
562
 
      g_cancellable_cancel (priv->cancellable);
563
 
      priv->cancellable = NULL;
564
 
    }
 
499
  g_clear_pointer (&priv->cancellable, g_cancellable_cancel);
565
500
  g_free (priv->gnome_version);
566
501
  g_free (priv->gnome_date);
567
502
  g_free (priv->gnome_distributor);
568
503
 
569
 
  if (priv->hostnamed_proxy != NULL)
570
 
    {
571
 
      g_object_unref (priv->hostnamed_proxy);
572
 
      priv->hostnamed_proxy = NULL;
573
 
    }
574
 
 
575
 
  if (priv->media_settings != NULL)
576
 
    {
577
 
      g_object_unref (priv->media_settings);
578
 
      priv->media_settings = NULL;
579
 
    }
580
 
 
581
 
  if (priv->session_settings != NULL)
582
 
    {
583
 
      g_object_unref (priv->session_settings);
584
 
      priv->session_settings = NULL;
585
 
    }
 
504
  g_clear_object (&priv->hostnamed_proxy);
 
505
  g_clear_object (&priv->media_settings);
586
506
 
587
507
  G_OBJECT_CLASS (cc_info_panel_parent_class)->finalize (object);
588
508
}
594
514
 
595
515
  g_type_class_add_private (klass, sizeof (CcInfoPanelPrivate));
596
516
 
597
 
  object_class->get_property = cc_info_panel_get_property;
598
 
  object_class->set_property = cc_info_panel_set_property;
599
517
  object_class->dispose = cc_info_panel_dispose;
600
518
  object_class->finalize = cc_info_panel_finalize;
601
519
}
758
676
  /* count duplicates */
759
677
  for (i = 0; i != info->ncpu; ++i)
760
678
    {
761
 
      const char * const keys[] = { "model name", "cpu" };
 
679
      const char * const keys[] = { "model name", "cpu", "Processor" };
762
680
      char *model;
763
681
      int  *count;
764
682
 
771
689
        }
772
690
 
773
691
      if (model == NULL)
774
 
          model = _("Unknown model");
 
692
          continue;
775
693
 
776
694
      count = g_hash_table_lookup (counts, model);
777
695
      if (count == NULL)
832
750
  gtk_tree_path_free (path);
833
751
}
834
752
 
835
 
static gboolean
836
 
switch_fallback_get_mapping (GValue    *value,
837
 
                             GVariant  *variant,
838
 
                             gpointer   data)
839
 
{
840
 
  const char *setting;
841
 
 
842
 
  setting = g_variant_get_string (variant, NULL);
843
 
  g_value_set_boolean (value, strcmp (setting, "gnome") != 0);
844
 
  return TRUE;
845
 
}
846
 
 
847
 
static void
848
 
toggle_fallback_warning_label (CcInfoPanel *self,
849
 
                               gboolean     visible)
850
 
{
851
 
  GtkWidget  *widget;
852
 
  const char *text;
853
 
 
854
 
  widget = WID ("graphics_logout_warning_label");
855
 
 
856
 
  if (self->priv->is_fallback)
857
 
    text = _("The next login will attempt to use the standard experience.");
858
 
  else
859
 
    text = _("The next login will use the fallback mode intended for unsupported graphics hardware.");
860
 
 
861
 
  gtk_label_set_text (GTK_LABEL (widget), text);
862
 
 
863
 
  if (visible)
864
 
    gtk_widget_show (widget);
865
 
  else
866
 
    gtk_widget_hide (widget);
867
 
}
868
 
 
869
 
static GVariant *
870
 
switch_fallback_set_mapping (const GValue        *value,
871
 
                             const GVariantType  *expected_type,
872
 
                             gpointer             data)
873
 
{
874
 
  CcInfoPanel *self = data;
875
 
  gboolean     is_set;
876
 
 
877
 
  is_set = g_value_get_boolean (value);
878
 
  if (is_set != self->priv->is_fallback)
879
 
    toggle_fallback_warning_label (self, TRUE);
880
 
  else
881
 
    toggle_fallback_warning_label (self, FALSE);
882
 
 
883
 
  return g_variant_new_string (is_set ? "gnome-fallback" : "gnome");
884
 
}
885
 
 
886
 
static void
887
 
info_panel_setup_graphics (CcInfoPanel  *self)
888
 
{
889
 
  GtkWidget *widget;
890
 
  GtkSwitch *sw;
891
 
  char *text;
892
 
 
893
 
  widget = WID ("graphics_driver_label");
894
 
  gtk_label_set_markup (GTK_LABEL (widget), self->priv->graphics_data->hardware_string);
895
 
 
896
 
  self->priv->is_fallback = get_current_is_fallback (self);
897
 
  if (self->priv->is_fallback)
898
 
    {
899
 
      /* translators: The hardware is not able to run GNOME 3's
900
 
       * shell, so we use the GNOME "Fallback" session */
901
 
      text = g_strdup (C_("Experience", "Fallback"));
902
 
    }
903
 
  else
904
 
    {
905
 
      /* translators: The hardware is able to run GNOME 3's
906
 
       * shell, also called "Standard" experience */
907
 
      text = g_strdup (C_("Experience", "Standard"));
908
 
    }
909
 
  widget = WID ("graphics_experience_label");
910
 
  gtk_label_set_markup (GTK_LABEL (widget), text ? text : "");
911
 
  g_free (text);
912
 
 
913
 
  widget = WID ("graphics_fallback_switch_box");
914
 
  sw = GTK_SWITCH (gtk_switch_new ());
915
 
  g_settings_bind_with_mapping (self->priv->session_settings, KEY_SESSION_NAME,
916
 
                                sw, "active", 0,
917
 
                                switch_fallback_get_mapping,
918
 
                                switch_fallback_set_mapping, self, NULL);
919
 
  gtk_box_pack_start (GTK_BOX (widget), GTK_WIDGET (sw), FALSE, FALSE, 0);
920
 
  gtk_widget_show_all (GTK_WIDGET (sw));
921
 
  widget = WID ("fallback-label");
922
 
  gtk_label_set_mnemonic_widget (GTK_LABEL (widget), GTK_WIDGET (sw));
923
 
}
924
 
 
925
753
static gboolean            
926
754
url_nav_callback (WebKitWebView             *web_view,
927
755
              WebKitWebFrame            *frame,
975
803
      g_error_free (error);
976
804
      error = NULL;
977
805
    }
 
806
  else
 
807
    {
 
808
      g_debug ("Set '%s' as the default handler for '%s'",
 
809
               g_app_info_get_name (info), app_data->content_type);
 
810
    }
978
811
 
979
812
  if (app_data->extra_type_filter)
980
813
    {
996
829
                         g_app_info_get_name (info), mime_types[i], error->message);
997
830
              g_error_free (error);
998
831
            }
 
832
          else
 
833
            {
 
834
              g_debug ("Set '%s' as the default handler for '%s'",
 
835
              g_app_info_get_name (info), mime_types[i]);
 
836
            }
999
837
        }
1000
838
 
1001
839
      g_pattern_spec_free (pattern);
1008
846
info_panel_setup_default_app (CcInfoPanel    *self,
1009
847
                              DefaultAppData *data,
1010
848
                              guint           left_attach,
1011
 
                              guint           right_attach,
1012
 
                              guint           top_attach,
1013
 
                              guint           bottom_attach)
 
849
                              guint           top_attach)
1014
850
{
1015
851
  GtkWidget *button;
1016
 
  GtkWidget *table;
 
852
  GtkWidget *grid;
1017
853
  GtkWidget *label;
1018
854
 
1019
 
  table = WID ("default_apps_table");
 
855
  grid = WID ("default_apps_grid");
1020
856
 
1021
857
  button = gtk_app_chooser_button_new (data->content_type);
1022
858
  g_object_set_data (G_OBJECT (button), "cc-default-app-data", data);
1023
859
 
1024
860
  gtk_app_chooser_button_set_show_default_item (GTK_APP_CHOOSER_BUTTON (button), TRUE);
1025
 
  gtk_table_attach (GTK_TABLE (table), button,
1026
 
                    left_attach, right_attach,
1027
 
                    top_attach, bottom_attach, GTK_FILL, 0, 0, 0);
 
861
  gtk_grid_attach (GTK_GRID (grid), button, left_attach, top_attach,
 
862
                   1, 1);
1028
863
  g_signal_connect (G_OBJECT (button), "changed",
1029
864
                    G_CALLBACK (default_app_changed), self);
1030
865
  gtk_widget_show (button);
1054
889
  for (i = 0; i < G_N_ELEMENTS(preferred_app_infos); i++)
1055
890
    {
1056
891
      info_panel_setup_default_app (self, &preferred_app_infos[i],
1057
 
                                    1, 2, i, i+1);
 
892
                                    1, i);
1058
893
    }
1059
894
}
1060
895
 
1584
1419
                      _("Removable Media"),
1585
1420
                      -1);
1586
1421
 
1587
 
  gtk_list_store_append (model, &iter);
1588
 
  gtk_list_store_set (model, &iter, section_name_column,
1589
 
                      _("Graphics"),
1590
 
                      -1);
1591
 
 
1592
1422
  if (!g_strcmp0 (g_getenv ("XDG_CURRENT_DESKTOP"), "Unity"))
1593
1423
    {
1594
1424
      gtk_list_store_append (model, &iter);
2005
1835
    }
2006
1836
}
2007
1837
 
 
1838
static gboolean
 
1839
get_pk_version_property (GDBusProxy *pk_proxy,
 
1840
                         const char *property,
 
1841
                         guint32 *retval)
 
1842
{
 
1843
  GVariant *v;
 
1844
 
 
1845
  v = g_dbus_proxy_get_cached_property (pk_proxy, property);
 
1846
  if (!v)
 
1847
    return FALSE;
 
1848
 
 
1849
  g_variant_get (v, "u", retval);
 
1850
  g_variant_unref (v);
 
1851
  return TRUE;
 
1852
}
 
1853
 
 
1854
static void
 
1855
got_pk_proxy_cb (GObject *source_object,
 
1856
                 GAsyncResult *res,
 
1857
                 CcInfoPanel *self)
 
1858
{
 
1859
  GError *error = NULL;
 
1860
  guint32 major, minor, micro;
 
1861
 
 
1862
  self->priv->pk_proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
 
1863
 
 
1864
  if (self->priv->pk_proxy == NULL)
 
1865
    {
 
1866
      g_warning ("Unable to get PackageKit proxy object: %s", error->message);
 
1867
      g_error_free (error);
 
1868
      self->priv->updates_state = PK_NOT_AVAILABLE;
 
1869
      refresh_update_button (self);
 
1870
      return;
 
1871
    }
 
1872
 
 
1873
  if (!get_pk_version_property(self->priv->pk_proxy, "VersionMajor", &major) ||
 
1874
      !get_pk_version_property(self->priv->pk_proxy, "VersionMinor", &minor) ||
 
1875
      !get_pk_version_property(self->priv->pk_proxy, "VersionMicro", &micro))
 
1876
    {
 
1877
      g_warning ("Unable to get PackageKit version");
 
1878
      g_clear_object (&self->priv->pk_proxy);
 
1879
      self->priv->updates_state = PK_NOT_AVAILABLE;
 
1880
      refresh_update_button (self);
 
1881
      return;
 
1882
    }
 
1883
 
 
1884
  if (major != 0 || minor != 8)
 
1885
    {
 
1886
      g_warning ("PackageKit version %u.%u.%u not supported", major, minor, micro);
 
1887
      g_clear_object (&self->priv->pk_proxy);
 
1888
      self->priv->updates_state = PK_NOT_AVAILABLE;
 
1889
      refresh_update_button (self);
 
1890
    }
 
1891
  else
 
1892
    {
 
1893
      g_signal_connect (self->priv->pk_proxy,
 
1894
                        "g-signal",
 
1895
                        G_CALLBACK (on_pk_signal),
 
1896
                        self);
 
1897
      refresh_updates (self);
 
1898
    }
 
1899
}
 
1900
 
 
1901
static void
 
1902
info_panel_setup_updates (CcInfoPanel *self)
 
1903
{
 
1904
  self->priv->updates_state = CHECKING_UPDATES;
 
1905
  refresh_update_button (self);
 
1906
 
 
1907
  g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
 
1908
                            G_DBUS_PROXY_FLAGS_NONE,
 
1909
                            NULL,
 
1910
                            "org.freedesktop.PackageKit",
 
1911
                            "/org/freedesktop/PackageKit",
 
1912
                            "org.freedesktop.PackageKit",
 
1913
                            NULL,
 
1914
                            (GAsyncReadyCallback) got_pk_proxy_cb,
 
1915
                            self);
 
1916
}
 
1917
 
2008
1918
static void
2009
1919
cc_info_panel_init (CcInfoPanel *self)
2010
1920
{
2015
1925
 
2016
1926
  self->priv->builder = gtk_builder_new ();
2017
1927
 
2018
 
  self->priv->session_settings = g_settings_new (GNOME_SESSION_MANAGER_SCHEMA);
2019
1928
  self->priv->media_settings = g_settings_new (MEDIA_HANDLING_SCHEMA);
2020
1929
 
2021
1930
  self->priv->session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
2022
1931
 
2023
1932
  g_assert (self->priv->session_bus);
2024
1933
 
2025
 
  self->priv->pk_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
2026
 
                                                        G_DBUS_PROXY_FLAGS_NONE,
2027
 
                                                        NULL,
2028
 
                                                        "org.freedesktop.PackageKit",
2029
 
                                                        "/org/freedesktop/PackageKit",
2030
 
                                                        "org.freedesktop.PackageKit",
2031
 
                                                        NULL,
2032
 
                                                        NULL);
2033
 
  if (self->priv->pk_proxy == NULL)
2034
 
    {
2035
 
      g_warning ("Unable to get PackageKit proxy object");
2036
 
      self->priv->updates_state = PK_NOT_AVAILABLE;
2037
 
    }
2038
 
  else
2039
 
    {
2040
 
      GVariant *v;
2041
 
      guint32 major, minor, micro;
2042
 
 
2043
 
      v = g_dbus_proxy_get_cached_property (self->priv->pk_proxy, "VersionMajor");
2044
 
      g_variant_get (v, "u", &major);
2045
 
      g_variant_unref (v);
2046
 
      v = g_dbus_proxy_get_cached_property (self->priv->pk_proxy, "VersionMinor");
2047
 
      g_variant_get (v, "u", &minor);
2048
 
      g_variant_unref (v);
2049
 
      v = g_dbus_proxy_get_cached_property (self->priv->pk_proxy, "VersionMicro");
2050
 
      g_variant_get (v, "u", &micro);
2051
 
      g_variant_unref (v);
2052
 
 
2053
 
      if (major != 0 || minor != 8)
2054
 
        {
2055
 
          g_warning ("PackageKit version %u.%u.%u not supported", major, minor, micro);
2056
 
          g_clear_object (&self->priv->pk_proxy);
2057
 
          self->priv->updates_state = PK_NOT_AVAILABLE;
2058
 
        }
2059
 
      else
2060
 
        {
2061
 
          g_signal_connect (self->priv->pk_proxy,
2062
 
                            "g-signal",
2063
 
                            G_CALLBACK (on_pk_signal),
2064
 
                            self);
2065
 
          refresh_updates (self);
2066
 
        }
2067
 
    }
2068
 
 
2069
 
  gtk_builder_add_from_file (self->priv->builder,
2070
 
                             GNOMECC_UI_DIR "/info.ui",
2071
 
                             &error);
2072
 
 
2073
 
  if (error != NULL)
 
1934
  if (gtk_builder_add_from_file (self->priv->builder,
 
1935
                                 GNOMECC_UI_DIR "/info.ui",
 
1936
                                 &error) == 0)
2074
1937
    {
2075
1938
      g_warning ("Could not load interface file: %s", error->message);
2076
1939
      g_error_free (error);
2082
1945
  widget = WID ("updates_button");
2083
1946
  g_signal_connect (widget, "clicked", G_CALLBACK (on_updates_button_clicked), self);
2084
1947
 
 
1948
  info_panel_setup_updates (self);
2085
1949
  info_panel_setup_selector (self);
2086
1950
  info_panel_setup_overview (self);
2087
1951
  info_panel_setup_default_apps (self);
2088
1952
  info_panel_setup_media (self);
2089
 
  info_panel_setup_graphics (self);
2090
1953
  if (!g_strcmp0 (g_getenv ("XDG_CURRENT_DESKTOP"), "Unity"))
2091
1954
    info_panel_setup_notice (self);
2092
1955
}