Exemplo n.º 1
0
/* Enable or disable the timers, depending on the value of ENABLE_MONITORING_KEY
 * and taking care of the previous state.  If selfing is disabled, we still
 * report apps usage based on (possibly) saved data, but don't collect data.
 */
static void
update_enable_monitoring (ShellAppUsage *self)
{
  gboolean enable;

  enable = g_settings_get_boolean (self->privacy_settings,
                                   ENABLE_MONITORING_KEY);

  /* Be sure not to start the timers if they were already set */
  if (enable && !self->enable_monitoring)
    {
      on_focus_app_changed (shell_window_tracker_get_default (), NULL, self);
    }
  /* ...and don't try to stop them if they were not running */
  else if (!enable && self->enable_monitoring)
    {
      if (self->watched_app)
        g_object_unref (self->watched_app);
      self->watched_app = NULL;
      if (self->save_id)
        {
          g_source_remove (self->save_id);
          self->save_id = 0;
        }
    }

  self->enable_monitoring = enable;
}
Exemplo n.º 2
0
static UsageData *
get_usage_for_app (ShellAppUsage *self,
                   ShellApp      *app)
{
  const char *context;

  context = _shell_window_tracker_get_app_context (shell_window_tracker_get_default (), app);

  return get_app_usage_for_context_and_id (self, context, shell_app_get_id (app));
}
Exemplo n.º 3
0
static void
on_child_exited (GPid      pid,
                 gint      status,
                 gpointer  unused_data)
{
  ShellWindowTracker *tracker;

  tracker = shell_window_tracker_get_default ();

  g_hash_table_remove (tracker->launched_pid_to_app, GINT_TO_POINTER((gint)pid));
}
Exemplo n.º 4
0
static void
shell_app_usage_init (ShellAppUsage *self)
{
  ShellGlobal *global;
  char *shell_userdata_dir, *path;
  GDBusConnection *session_bus;
  ShellWindowTracker *tracker;
  ShellAppSystem *app_system;

  global = shell_global_get ();

  self->app_usages_for_context = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_hash_table_destroy);

  tracker = shell_window_tracker_get_default ();
  g_signal_connect (tracker, "notify::focus-app", G_CALLBACK (on_focus_app_changed), self);

  app_system = shell_app_system_get_default ();
  g_signal_connect (app_system, "app-state-changed", G_CALLBACK (on_app_state_changed), self);

  session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
  self->session_proxy = g_dbus_proxy_new_sync (session_bus,
                                               G_DBUS_PROXY_FLAGS_NONE,
                                               NULL, /* interface info */
                                               "org.gnome.SessionManager",
                                               "/org/gnome/SessionManager/Presence",
                                               "org.gnome.SessionManager",
                                               NULL, /* cancellable */
                                               NULL /* error */);
  g_signal_connect (self->session_proxy, "g-signal", G_CALLBACK (session_proxy_signal), self);
  g_object_unref (session_bus);

  self->last_idle = 0;
  self->currently_idle = FALSE;
  self->enable_monitoring = FALSE;

  g_object_get (shell_global_get(), "userdatadir", &shell_userdata_dir, NULL),
  path = g_build_filename (shell_userdata_dir, DATA_FILENAME, NULL);
  g_free (shell_userdata_dir);
  self->configfile = g_file_new_for_path (path);
  g_free (path);
  restore_from_file (self);


  self->privacy_settings = g_settings_new(PRIVACY_SCHEMA);
  g_signal_connect (self->privacy_settings,
                    "changed::" ENABLE_MONITORING_KEY,
                    G_CALLBACK (on_enable_monitoring_key_changed),
                    self);
  update_enable_monitoring (self);
}
static void
_gather_pid_callback (GDesktopAppInfo   *gapp,
                      GPid               pid,
                      gpointer           data)
{
  ShellApp *app;
  ShellWindowTracker *tracker;

  g_return_if_fail (data != NULL);

  app = SHELL_APP (data);
  tracker = shell_window_tracker_get_default ();

  _shell_window_tracker_add_child_process_app (tracker,
                                               pid,
                                               app);
}
Exemplo n.º 6
0
static ClutterActor* load_icon_for_window(MetaSwitcher* self, MetaWindow* window)
{
    MetaSwitcherPrivate *priv = self->priv;
    MetaScreen *screen = meta_plugin_get_screen(priv->plugin);
    ShellWindowTracker* tracker = shell_window_tracker_get_default();
    ShellApp* app = shell_window_tracker_get_window_app(tracker, window);
    gint screen_width, screen_height, app_icon_size = APP_ICON_SIZE;

    /* TODO: @sonald scale app icon size at first */
    meta_screen_get_size(screen, &screen_width, &screen_height);
    if (priv->apps->len)
        app_icon_size = (screen_width - priv->apps->len * APP_ICON_PADDING ) / 
                        priv->apps->len;

    if (app_icon_size > APP_ICON_SIZE)
        app_icon_size = APP_ICON_SIZE;

    if (app)
        return shell_app_create_icon_texture(app, app_icon_size);

    return NULL;
}