Blame src/applet.h

Packit Service 639700
// SPDX-License-Identifier: GPL-2.0+
Packit fabffb
/* NetworkManager Applet -- allow user control over networking
Packit fabffb
 *
Packit fabffb
 * Copyright 2004 - 2014 Red Hat, Inc.
Packit fabffb
 * Copyright 2005 - 2008 Novell, Inc.
Packit fabffb
 */
Packit fabffb
Packit fabffb
#ifndef APPLET_H
Packit fabffb
#define APPLET_H
Packit fabffb
Packit fabffb
#include <string.h>
Packit fabffb
Packit fabffb
#include <gtk/gtk.h>
Packit fabffb
#include <gdk/gdkx.h>
Packit fabffb
Packit fabffb
#include <net/ethernet.h>
Packit fabffb
Packit fabffb
#include <libnotify/notify.h>
Packit fabffb
Packit fabffb
#ifdef WITH_APPINDICATOR
Packit fabffb
#if USE_AYATANA_INDICATORS
Packit fabffb
#include <libayatana-appindicator/app-indicator.h>
Packit fabffb
#else
Packit fabffb
#include <libappindicator/app-indicator.h>
Packit fabffb
#endif
Packit fabffb
#endif
Packit fabffb
Packit fabffb
#include <NetworkManager.h>
Packit fabffb
Packit fabffb
#include "applet-agent.h"
Packit fabffb
Packit fabffb
#if WITH_WWAN
Packit fabffb
#include <libmm-glib.h>
Packit fabffb
#endif
Packit fabffb
Packit fabffb
#define NM_TYPE_APPLET              (nma_get_type())
Packit fabffb
#define NM_APPLET(object)           (G_TYPE_CHECK_INSTANCE_CAST((object), NM_TYPE_APPLET, NMApplet))
Packit fabffb
#define NM_APPLET_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_APPLET, NMAppletClass))
Packit fabffb
#define NM_IS_APPLET(object)        (G_TYPE_CHECK_INSTANCE_TYPE((object), NM_TYPE_APPLET))
Packit fabffb
#define NM_IS_APPLET_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_APPLET))
Packit fabffb
#define NM_APPLET_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), NM_TYPE_APPLET, NMAppletClass))
Packit fabffb
Packit Service 639700
#ifdef WITH_APPINDICATOR
Packit Service 639700
#define INDICATOR_ENABLED(a) ((a)->app_indicator)
Packit Service 639700
#else
Packit Service 639700
#define INDICATOR_ENABLED(a) (FALSE)
Packit Service 639700
#endif  /* WITH_APPINDICATOR */
Packit Service 639700
Packit fabffb
typedef struct {
Packit fabffb
	GApplicationClass parent_class;
Packit fabffb
} NMAppletClass;
Packit fabffb
Packit fabffb
#define APPLET_PREFS_SCHEMA                       "org.gnome.nm-applet"
Packit fabffb
#define PREF_DISABLE_CONNECTED_NOTIFICATIONS      "disable-connected-notifications"
Packit fabffb
#define PREF_DISABLE_DISCONNECTED_NOTIFICATIONS   "disable-disconnected-notifications"
Packit fabffb
#define PREF_DISABLE_VPN_NOTIFICATIONS            "disable-vpn-notifications"
Packit fabffb
#define PREF_DISABLE_WIFI_CREATE                  "disable-wifi-create"
Packit fabffb
#define PREF_SUPPRESS_WIFI_NETWORKS_AVAILABLE     "suppress-wireless-networks-available"
Packit fabffb
#define PREF_SHOW_APPLET                          "show-applet"
Packit fabffb
Packit fabffb
#define ICON_LAYER_LINK                           0
Packit fabffb
#define ICON_LAYER_VPN                            1
Packit fabffb
#define ICON_LAYER_MAX                            ICON_LAYER_VPN
Packit fabffb
Packit fabffb
typedef struct NMADeviceClass NMADeviceClass;
Packit fabffb
Packit fabffb
/*
Packit fabffb
 * Applet instance data
Packit fabffb
 *
Packit fabffb
 */
Packit fabffb
typedef struct {
Packit fabffb
	GApplication parent;
Packit fabffb
Packit fabffb
	NMClient *nm_client;
Packit fabffb
	AppletAgent *agent;
Packit fabffb
Packit fabffb
	GSettings *gsettings;
Packit fabffb
Packit fabffb
#if WITH_WWAN
Packit fabffb
	MMManager *mm1;
Packit fabffb
	gboolean   mm1_running;
Packit fabffb
#endif
Packit fabffb
Packit fabffb
	gboolean visible;
Packit fabffb
Packit fabffb
	/* Permissions */
Packit fabffb
	NMClientPermissionResult permissions[NM_CLIENT_PERMISSION_LAST + 1];
Packit fabffb
Packit fabffb
	/* Device classes */
Packit fabffb
	NMADeviceClass *ethernet_class;
Packit fabffb
	NMADeviceClass *wifi_class;
Packit fabffb
#if WITH_WWAN
Packit fabffb
	NMADeviceClass *broadband_class;
Packit fabffb
#endif
Packit fabffb
	NMADeviceClass *bt_class;
Packit fabffb
Packit fabffb
	/* Data model elements */
Packit fabffb
	guint           update_icon_id;
Packit fabffb
	char *          tip;
Packit fabffb
Packit fabffb
	/* Animation stuff */
Packit fabffb
	int             animation_step;
Packit fabffb
	guint           animation_id;
Packit fabffb
#define NUM_CONNECTING_FRAMES 11
Packit fabffb
#define NUM_VPN_CONNECTING_FRAMES 14
Packit fabffb
Packit fabffb
	GtkIconTheme *  icon_theme;
Packit fabffb
	GHashTable *    icon_cache;
Packit fabffb
	GdkPixbuf *     fallback_icon;
Packit fabffb
	int             icon_size;
Packit fabffb
Packit fabffb
	/* Active status icon pixbufs */
Packit fabffb
	GdkPixbuf *     icon_layers[ICON_LAYER_MAX + 1];
Packit fabffb
Packit fabffb
	/* Direct UI elements */
Packit fabffb
#ifdef WITH_APPINDICATOR
Packit fabffb
	AppIndicator *  app_indicator;
Packit fabffb
#endif
Packit fabffb
	guint           update_menu_id;
Packit fabffb
Packit fabffb
	GtkStatusIcon * status_icon;
Packit fabffb
Packit fabffb
	GtkWidget *     menu;
Packit fabffb
	GtkWidget *     context_menu;
Packit fabffb
Packit fabffb
	GtkWidget *     notifications_enabled_item;
Packit fabffb
	guint           notifications_enabled_toggled_id;
Packit fabffb
Packit fabffb
	GtkWidget *     networking_enabled_item;
Packit fabffb
	guint           networking_enabled_toggled_id;
Packit fabffb
	GtkWidget *     wifi_enabled_item;
Packit fabffb
	guint           wifi_enabled_toggled_id;
Packit fabffb
	GtkWidget *     wwan_enabled_item;
Packit fabffb
	guint           wwan_enabled_toggled_id;
Packit fabffb
Packit fabffb
	GtkWidget *     info_menu_item;
Packit fabffb
	GtkWidget *     connections_menu_item;
Packit fabffb
Packit fabffb
	GtkBuilder *    info_dialog_ui;
Packit fabffb
	NotifyNotification* notification;
Packit fabffb
Packit fabffb
	/* Tracker objects for secrets requests */
Packit fabffb
	GSList *        secrets_reqs;
Packit fabffb
Packit fabffb
	guint           wifi_scan_id;
Packit fabffb
} NMApplet;
Packit fabffb
Packit fabffb
typedef void (*AppletNewAutoConnectionCallback) (NMConnection *connection,
Packit fabffb
                                                 gboolean created,
Packit fabffb
                                                 gboolean canceled,
Packit fabffb
                                                 gpointer user_data);
Packit fabffb
Packit fabffb
typedef struct _SecretsRequest SecretsRequest;
Packit fabffb
typedef void (*SecretsRequestFreeFunc) (SecretsRequest *req);
Packit fabffb
Packit fabffb
struct _SecretsRequest {
Packit fabffb
	size_t totsize;
Packit fabffb
	gpointer reqid;
Packit fabffb
	char *setting_name;
Packit fabffb
	char **hints;
Packit fabffb
	guint32 flags;
Packit fabffb
	NMApplet *applet;
Packit fabffb
	AppletAgentSecretsCallback callback;
Packit fabffb
	gpointer callback_data;
Packit fabffb
Packit fabffb
	NMConnection *connection;
Packit fabffb
Packit fabffb
	/* Class-specific stuff */
Packit fabffb
	SecretsRequestFreeFunc free_func;
Packit fabffb
};
Packit fabffb
Packit fabffb
void applet_secrets_request_set_free_func (SecretsRequest *req,
Packit fabffb
                                           SecretsRequestFreeFunc free_func);
Packit fabffb
void applet_secrets_request_complete (SecretsRequest *req,
Packit fabffb
                                      GVariant *settings,
Packit fabffb
                                      GError *error);
Packit fabffb
void applet_secrets_request_complete_setting (SecretsRequest *req,
Packit fabffb
                                              const char *setting_name,
Packit fabffb
                                              GError *error);
Packit fabffb
void applet_secrets_request_free (SecretsRequest *req);
Packit fabffb
Packit fabffb
struct NMADeviceClass {
Packit fabffb
	gboolean       (*new_auto_connection)  (NMDevice *device,
Packit fabffb
	                                        gpointer user_data,
Packit fabffb
	                                        AppletNewAutoConnectionCallback callback,
Packit fabffb
	                                        gpointer callback_data);
Packit fabffb
Packit fabffb
	void           (*add_menu_item)        (NMDevice *device,
Packit fabffb
	                                        gboolean multiple_devices,
Packit fabffb
	                                        const GPtrArray *connections,
Packit fabffb
	                                        NMConnection *active,
Packit fabffb
	                                        GtkWidget *menu,
Packit fabffb
	                                        NMApplet *applet);
Packit fabffb
Packit fabffb
	void           (*device_added)         (NMDevice *device, NMApplet *applet);
Packit fabffb
Packit fabffb
	void           (*device_state_changed) (NMDevice *device,
Packit fabffb
	                                        NMDeviceState new_state,
Packit fabffb
	                                        NMDeviceState old_state,
Packit fabffb
	                                        NMDeviceStateReason reason,
Packit fabffb
	                                        NMApplet *applet);
Packit fabffb
	void           (*notify_connected)     (NMDevice *device,
Packit fabffb
	                                        const char *msg,
Packit fabffb
	                                        NMApplet *applet);
Packit fabffb
Packit fabffb
	/* Device class is expected to pass a *referenced* pixbuf, which will
Packit fabffb
	 * be unrefed by the icon code.  This allows the device class to create
Packit fabffb
	 * a composited pixbuf if necessary and pass the reference to the caller.
Packit fabffb
	 */
Packit fabffb
	void           (*get_icon)             (NMDevice *device,
Packit fabffb
	                                        NMDeviceState state,
Packit fabffb
	                                        NMConnection *connection,
Packit fabffb
	                                        GdkPixbuf **out_pixbuf,
Packit fabffb
	                                        const char **out_icon_name,
Packit fabffb
	                                        char **tip,
Packit fabffb
	                                        NMApplet *applet);
Packit fabffb
Packit fabffb
	size_t         secrets_request_size;
Packit fabffb
	gboolean       (*get_secrets)          (SecretsRequest *req,
Packit fabffb
	                                        GError **error);
Packit fabffb
};
Packit fabffb
Packit fabffb
GType nma_get_type (void);
Packit fabffb
Packit fabffb
NMApplet *nm_applet_new (void);
Packit fabffb
Packit fabffb
void applet_schedule_update_icon (NMApplet *applet);
Packit fabffb
void applet_schedule_update_menu (NMApplet *applet);
Packit fabffb
Packit fabffb
NMClient *applet_get_settings (NMApplet *applet);
Packit fabffb
Packit fabffb
GPtrArray *applet_get_all_connections (NMApplet *applet);
Packit fabffb
Packit fabffb
gboolean nma_menu_device_check_unusable (NMDevice *device);
Packit fabffb
Packit fabffb
GtkWidget * nma_menu_device_get_menu_item (NMDevice *device,
Packit fabffb
                                           NMApplet *applet,
Packit fabffb
                                           const char *unavailable_msg);
Packit fabffb
Packit fabffb
void applet_menu_item_activate_helper (NMDevice *device,
Packit fabffb
                                       NMConnection *connection,
Packit fabffb
                                       const char *specific_object,
Packit fabffb
                                       NMApplet *applet,
Packit fabffb
                                       gpointer dclass_data);
Packit fabffb
Packit fabffb
void applet_menu_item_disconnect_helper (NMDevice *device,
Packit fabffb
                                         NMApplet *applet);
Packit fabffb
Packit fabffb
void applet_menu_item_add_complex_separator_helper (GtkWidget *menu,
Packit fabffb
                                                    NMApplet *applet,
Packit fabffb
                                                    const gchar* label);
Packit fabffb
Packit fabffb
GtkWidget*
Packit fabffb
applet_menu_item_create_device_item_helper (NMDevice *device,
Packit fabffb
                                            NMApplet *applet,
Packit fabffb
                                            const gchar *text);
Packit fabffb
Packit fabffb
NMRemoteConnection *applet_get_exported_connection_for_device (NMDevice *device, NMApplet *applet);
Packit fabffb
Packit fabffb
NMDevice *applet_get_device_for_connection (NMApplet *applet, NMConnection *connection);
Packit fabffb
Packit fabffb
void applet_do_notify (NMApplet *applet,
Packit fabffb
                       NotifyUrgency urgency,
Packit fabffb
                       const char *summary,
Packit fabffb
                       const char *message,
Packit fabffb
                       const char *icon,
Packit fabffb
                       const char *action1,
Packit fabffb
                       const char *action1_label,
Packit fabffb
                       NotifyActionCallback action1_cb,
Packit fabffb
                       gpointer action1_user_data);
Packit fabffb
Packit fabffb
void applet_do_notify_with_pref (NMApplet *applet,
Packit fabffb
                                 const char *summary,
Packit fabffb
                                 const char *message,
Packit fabffb
                                 const char *icon,
Packit fabffb
                                 const char *pref);
Packit fabffb
Packit fabffb
GtkWidget * applet_new_menu_item_helper (NMConnection *connection,
Packit fabffb
                                         NMConnection *active,
Packit fabffb
                                         gboolean add_active);
Packit fabffb
Packit fabffb
GdkPixbuf * nma_icon_check_and_load (const char *name,
Packit fabffb
                                     NMApplet *applet);
Packit fabffb
Packit fabffb
gboolean applet_wifi_connect_to_hidden_network (NMApplet *applet);
Packit fabffb
gboolean applet_wifi_create_wifi_network (NMApplet *applet);
Packit fabffb
gboolean applet_wifi_can_create_wifi_network (NMApplet *applet);
Packit fabffb
Packit fabffb
typedef enum {
Packit fabffb
	NMA_ADD_ACTIVE   = 1,
Packit fabffb
	NMA_ADD_INACTIVE = 2,
Packit fabffb
} NMAAddActiveInactiveEnum;
Packit fabffb
Packit fabffb
void applet_add_connection_items (NMDevice *device,
Packit fabffb
                                  const GPtrArray *connections,
Packit fabffb
                                  gboolean sensitive,
Packit fabffb
                                  NMConnection *active,
Packit fabffb
                                  NMAAddActiveInactiveEnum flag,
Packit fabffb
                                  GtkWidget *menu,
Packit fabffb
                                  NMApplet *applet);
Packit fabffb
Packit fabffb
void applet_add_default_connection_item (NMDevice *device,
Packit fabffb
                                         const char *label,
Packit fabffb
                                         gboolean sensitive,
Packit fabffb
                                         GtkWidget *menu,
Packit fabffb
                                         NMApplet *applet);
Packit fabffb
Packit fabffb
#endif