~and471/indicator-network/gtk3

« back to all changes in this revision

Viewing changes to src/backend/network-menu.c

  • Committer: Kalle Valo
  • Date: 2011-03-08 17:52:36 UTC
  • mfrom: (158.2.1 bug-684574)
  • Revision ID: kalle.valo@canonical.com-20110308175236-b92mmyth58wdpvj6
MergeĀ lp:~kvalo/indicator-network/bug-685674

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
#include "dbus-shared-names.h"
31
31
#include "connman.h"
32
32
#include "manager.h"
 
33
#include "connman-manager.h"
33
34
 
34
35
G_DEFINE_TYPE (NetworkMenu, network_menu, DBUSMENU_TYPE_MENUITEM)
35
36
 
67
68
  gboolean menu_enabled;
68
69
 
69
70
  Manager *network_service;
 
71
  ConnmanManager *connman;
70
72
};
71
73
 
72
74
static void
73
75
network_menu_dispose (GObject *object)
74
76
{
 
77
  NetworkMenu *self = NETWORK_MENU(object);
 
78
  NetworkMenuPrivate *priv = GET_PRIVATE(self);
 
79
 
 
80
 /* FIXME: unref all objects from NetworkMenuPrivate */
 
81
 
 
82
  if (priv->connman != NULL) {
 
83
    g_object_unref(priv->connman);
 
84
    priv->connman = NULL;
 
85
  }
 
86
 
75
87
  G_OBJECT_CLASS (network_menu_parent_class)->dispose (object);
76
88
}
77
89
 
398
410
  
399
411
}
400
412
 
401
 
static void tech_state_changed(Manager *manager, const gchar *tech,
402
 
                               gboolean state, gpointer user_data)
 
413
static void wifi_state_changed(ConnmanManager *connman, GParamSpec *pspec,
 
414
                               gpointer user_data)
403
415
{
404
416
  NetworkMenu *self = NETWORK_MENU(user_data);
405
417
  NetworkMenuPrivate *priv = GET_PRIVATE(self);
406
418
  const gchar *str;
 
419
  ConnmanTechnologyState state;
407
420
 
408
421
  g_return_if_fail(IS_NETWORK_MENU(self));
409
422
  g_return_if_fail(priv != NULL);
410
423
  g_return_if_fail(priv->wireless_header != NULL);
411
424
 
412
 
  if (g_strcmp0(tech, CONNMAN_TECHNOLOGY_WIFI) != 0 )
413
 
    return;
 
425
  state = connman_manager_get_wifi_state(priv->connman);
414
426
 
415
 
  if (state)
 
427
  switch (state) {
 
428
  case CONNMAN_TECHNOLOGY_STATE_ENABLED:
 
429
  case CONNMAN_TECHNOLOGY_STATE_CONNECTED:
416
430
    str = _("Wi-Fi: ON");
417
 
  else
 
431
    priv->wireless_enabled = TRUE;
 
432
    break;
 
433
  case CONNMAN_TECHNOLOGY_STATE_UNKNOWN:
 
434
  case CONNMAN_TECHNOLOGY_STATE_UNAVAILABLE:
 
435
  case CONNMAN_TECHNOLOGY_STATE_AVAILABLE:
 
436
  case CONNMAN_TECHNOLOGY_STATE_OFFLINE:
 
437
  default:
418
438
    str = _("Wi-Fi: OFF");
 
439
    priv->wireless_enabled = FALSE;
 
440
    break;
 
441
  }
419
442
 
420
443
  dbusmenu_menuitem_property_set(priv->wireless_header,
421
444
                                 DBUSMENU_MENUITEM_PROP_LABEL,
422
445
                                 str);
423
 
  priv->wireless_enabled = state;
424
446
}
425
447
 
426
448
static void toggle_wireless_cb(DbusmenuMenuitem *mi, guint timestamp,
427
449
                               gpointer user_data)
428
450
{
429
 
  NetworkMenu *self = user_data;
 
451
  NetworkMenu *self = NETWORK_MENU(user_data);
430
452
  NetworkMenuPrivate *priv = GET_PRIVATE(self);
431
 
  Manager *ns = priv->network_service;
432
 
 
433
 
  g_return_if_fail(ns != NULL);
434
 
 
435
 
  /* FIXME: enable or disable wireless accordingly */
 
453
 
 
454
  g_return_if_fail(priv != NULL);
 
455
  g_return_if_fail(priv->connman != NULL);
 
456
 
 
457
  if (priv->wireless_enabled)
 
458
    connman_manager_disable_technology(priv->connman,
 
459
                                       CONNMAN_TECHNOLOGY_TYPE_WIFI,
 
460
                                       NULL,
 
461
                                       NULL,
 
462
                                       NULL);
 
463
  else
 
464
    connman_manager_enable_technology(priv->connman,
 
465
                                      CONNMAN_TECHNOLOGY_TYPE_WIFI,
 
466
                                      NULL,
 
467
                                      NULL,
 
468
                                      NULL);
436
469
}
437
470
 
438
471
static void network_settings_activated(DbusmenuMenuitem *mi, guint timestamp,
474
507
  priv = GET_PRIVATE(self);
475
508
 
476
509
  priv->network_service = ns;
 
510
  g_return_val_if_fail(manager_get_connman(ns) != NULL, NULL);
 
511
  priv->connman = g_object_ref(manager_get_connman(ns));
477
512
 
478
513
  sm = manager_get_service_manager(ns);
479
514
  g_signal_connect(G_OBJECT(sm), "services-updated",
481
516
  g_signal_connect(G_OBJECT(sm), "state-changed",
482
517
                   G_CALLBACK(connect_state_changed), self);
483
518
 
484
 
  g_signal_connect(G_OBJECT(ns), "technology-state-changed",
485
 
                   G_CALLBACK(tech_state_changed), self);
 
519
  g_signal_connect(G_OBJECT(priv->connman), "notify::wifi-state",
 
520
                   G_CALLBACK(wifi_state_changed), self);
486
521
 
487
522
  server = dbusmenu_server_new(INDICATOR_NETWORK_DBUS_OBJECT);
488
523
  dbusmenu_server_set_root(server, DBUSMENU_MENUITEM(self));