[empathy/gnome-2-34] Import MxGtkLightSwitch from Mx
- From: Emilio Pozuelo Monfort <epm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [empathy/gnome-2-34] Import MxGtkLightSwitch from Mx
- Date: Mon, 14 Mar 2011 13:06:46 +0000 (UTC)
commit 706b0ad396bd569224e28ed45090a3457e0634f8
Author: Danielle Madeley <danielle madeley collabora co uk>
Date: Mon Mar 14 20:26:23 2011 +1100
Import MxGtkLightSwitch from Mx
Available under the terms of the LGPL 2.1.
libempathy-gtk/Makefile.am | 8 +-
libempathy-gtk/mx-gtk-light-switch.c | 539 ++++++++++++++++++++++++++++++++++
libempathy-gtk/mx-gtk-light-switch.h | 71 +++++
po/POTFILES.in | 1 +
4 files changed, 617 insertions(+), 2 deletions(-)
---
diff --git a/libempathy-gtk/Makefile.am b/libempathy-gtk/Makefile.am
index 390d37c..1b71e03 100644
--- a/libempathy-gtk/Makefile.am
+++ b/libempathy-gtk/Makefile.am
@@ -90,7 +90,9 @@ libempathy_gtk_handwritten_source = \
empathy-theme-irc.c \
empathy-theme-manager.c \
empathy-tls-dialog.c \
- empathy-ui-utils.c
+ empathy-ui-utils.c \
+ mx-gtk-light-switch.c \
+ $(NULL)
libempathy_gtk_headers = \
empathy-account-chooser.h \
@@ -152,7 +154,9 @@ libempathy_gtk_headers = \
empathy-theme-irc.h \
empathy-theme-manager.h \
empathy-tls-dialog.h \
- empathy-ui-utils.h
+ empathy-ui-utils.h \
+ mx-gtk-light-switch.h \
+ $(NULL)
libempathy_gtk_la_SOURCES = \
$(libempathy_gtk_handwritten_source) \
diff --git a/libempathy-gtk/mx-gtk-light-switch.c b/libempathy-gtk/mx-gtk-light-switch.c
new file mode 100644
index 0000000..a1427a3
--- /dev/null
+++ b/libempathy-gtk/mx-gtk-light-switch.c
@@ -0,0 +1,539 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+/*
+ * Copyright 2009 Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU Lesser General Public License,
+ * version 2.1, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ * Boston, MA 02111-1307, USA.
+ *
+ */
+
+/**
+ * SECTION:mx-gtk-light-switch
+ * @short_description: a toggle switch between two states
+ *
+ * A visual representation of a toggle switch that can move between two states.
+ */
+
+#include <config.h>
+#include "mx-gtk-light-switch.h"
+
+#include <glib/gi18n-lib.h>
+
+#if 0
+/* We use the special gcc constructor attribute so we can avoid
+ * requiring an init function to get translations to work! This
+ * function is also in mx-utils but we also need it here
+ * because that is a separate library */
+static void __attribute__ ((constructor))
+_start (void)
+{
+ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+}
+#endif
+
+G_DEFINE_TYPE (MxGtkLightSwitch, mx_gtk_light_switch, GTK_TYPE_DRAWING_AREA)
+
+#define MX_GTK_LIGHT_SWITCH_GET_PRIVATE(o) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((o), MX_GTK_TYPE_LIGHT_SWITCH, MxGtkLightSwitchPrivate))
+
+static gboolean mx_gtk_light_switch_configure (GtkWidget *lightswitch,
+ GdkEventConfigure *event);
+static gboolean mx_gtk_light_switch_expose (GtkWidget *lightswitch,
+ GdkEventExpose *event);
+static gboolean mx_gtk_light_switch_button_release (GtkWidget *lightswitch,
+ GdkEventButton *event);
+static gboolean mx_gtk_light_switch_button_press (GtkWidget *lightswitch,
+ GdkEventButton *event);
+static gboolean mx_gtk_light_switch_motion_notify (GtkWidget *lightswitch,
+ GdkEventMotion *event);
+static void mx_gtk_light_switch_size_request (GtkWidget *lightswitch,
+ GtkRequisition *req);
+
+static void mx_gtk_light_switch_style_set (GtkWidget *lightswitch,
+ GtkStyle *previous_style);
+
+enum {
+ SWITCH_FLIPPED,
+ LAST_SIGNAL
+};
+
+static guint mx_gtk_light_switch_signals[LAST_SIGNAL] = { 0 };
+
+enum {
+ PROP_0,
+ PROP_ACTIVE,
+};
+
+typedef struct _MxGtkLightSwitchPrivate MxGtkLightSwitchPrivate;
+
+struct _MxGtkLightSwitchPrivate {
+ gboolean active; /* boolean state of switch */
+ gboolean dragging; /* true if dragging switch */
+ gint x; /* the x position of the switch */
+ gint drag_start; /* position dragging started at */
+ gint drag_threshold;
+ gint switch_width;
+ gint switch_height;
+ gint trough_width;
+ gint offset; /* offset of the mouse to slider when dragging */
+};
+
+/* MEDIUM VERTICAL BAR U+2759 */
+#define ON_STRING "\342\235\231"
+ /* WHITE CIRCLE U+25CB */
+#define OFF_STRING "\342\227\213"
+
+#define UNAVAILABLE_STRING _("Unavailable")
+
+static void
+mx_gtk_light_switch_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ MxGtkLightSwitch *ls;
+
+ ls = MX_GTK_LIGHT_SWITCH (object);
+
+ switch (prop_id)
+ {
+ case PROP_ACTIVE:
+ mx_gtk_light_switch_set_active (ls, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+mx_gtk_light_switch_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ MxGtkLightSwitchPrivate *priv;
+
+ priv = MX_GTK_LIGHT_SWITCH_GET_PRIVATE (object);
+
+ switch (prop_id)
+ {
+ case PROP_ACTIVE:
+ g_value_set_boolean (value, priv->active);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+mx_gtk_light_switch_class_init (MxGtkLightSwitchClass *klass)
+{
+ GObjectClass *object_class;
+ GtkWidgetClass *widget_class;
+ GParamSpec *spec;
+
+ object_class = G_OBJECT_CLASS (klass);
+ widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->set_property = mx_gtk_light_switch_set_property;
+ object_class->get_property = mx_gtk_light_switch_get_property;
+
+ widget_class->configure_event = mx_gtk_light_switch_configure;
+ widget_class->expose_event = mx_gtk_light_switch_expose;
+ widget_class->button_release_event = mx_gtk_light_switch_button_release;
+ widget_class->button_press_event = mx_gtk_light_switch_button_press;
+ widget_class->motion_notify_event = mx_gtk_light_switch_motion_notify;
+ widget_class->size_request = mx_gtk_light_switch_size_request;
+ widget_class->style_set = mx_gtk_light_switch_style_set;
+
+ spec = g_param_spec_boolean ("active",
+ "Active",
+ "Is the light switch on or not",
+ FALSE,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_ACTIVE, spec);
+
+ /* MxGtkLightSwitch signals */
+ mx_gtk_light_switch_signals[SWITCH_FLIPPED] =
+ g_signal_new ("switch-flipped",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (MxGtkLightSwitchClass, switch_flipped),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE, 1,
+ G_TYPE_BOOLEAN);
+
+ g_type_class_add_private (klass,
+ sizeof (MxGtkLightSwitchPrivate));
+}
+
+static void
+mx_gtk_light_switch_init (MxGtkLightSwitch *self)
+{
+ MxGtkLightSwitchPrivate *priv;
+
+ priv = MX_GTK_LIGHT_SWITCH_GET_PRIVATE (self);
+ priv->active = FALSE;
+ priv->x = 0;
+
+ /* add events, do initial draw/update, etc */
+ gtk_widget_add_events (GTK_WIDGET (self),
+ GDK_BUTTON_PRESS_MASK
+ | GDK_BUTTON_RELEASE_MASK
+ | GDK_POINTER_MOTION_MASK);
+}
+
+static void
+draw (GtkWidget *lightswitch,
+ cairo_t *cr)
+{
+ MxGtkLightSwitchPrivate *priv;
+
+ gint on_label_x;
+ gint off_label_x;
+/*
+ gint label_width;
+ gint label_height;
+*/
+ GtkStyle *style;
+// PangoLayout *layout;
+// PangoContext *context;
+ GtkStateType state_type;
+
+ priv = MX_GTK_LIGHT_SWITCH_GET_PRIVATE (lightswitch);
+ style = lightswitch->style;
+#if GTK_CHECK_VERSION (2,19,5)
+ state_type = gtk_widget_get_state (lightswitch);
+#else
+ state_type = GTK_WIDGET_STATE (lightswitch);
+#endif
+
+ on_label_x = (priv->trough_width / 5) * 0.75;
+ off_label_x = (priv->trough_width / 8) * 5;
+
+ /* draw the trough */
+ gtk_paint_box (style,
+ lightswitch->window,
+ (state_type != GTK_STATE_INSENSITIVE && priv->active)
+ ? GTK_STATE_SELECTED : state_type,
+ GTK_SHADOW_IN,
+ NULL,
+ NULL,
+ "light-switch-trough",
+ 0,
+ 0,
+ (priv->trough_width),
+ priv->switch_height);
+
+ if (state_type == GTK_STATE_INSENSITIVE)
+ return;
+#if 0
+ if (state_type == GTK_STATE_INSENSITIVE)
+ {
+ context = gdk_pango_context_get ();
+ layout = pango_layout_new (context);
+ g_object_unref (context);
+
+ pango_layout_set_font_description (layout, style->font_desc);
+ pango_layout_set_text (layout, UNAVAILABLE_STRING, -1);
+ pango_layout_get_size (layout, &label_width, &label_height);
+ gtk_paint_layout (style, lightswitch->window, state_type, FALSE,
+ NULL, lightswitch, "lighswitch-label",
+ (priv->trough_width - (label_width / PANGO_SCALE)) / 2,
+ (priv->switch_height - (label_height / PANGO_SCALE)) / 2,
+ layout);
+ g_object_unref (layout);
+ return;
+ }
+
+ /* Draw the first label; "On" */
+ context = gdk_pango_context_get ();
+ layout = pango_layout_new (context);
+ g_object_unref (context);
+ pango_layout_set_font_description (layout,
+ style->font_desc);
+ pango_layout_set_text (layout, ON_STRING, -1);
+ pango_layout_get_size (layout,
+ &label_width,
+ &label_height);
+ gtk_paint_layout (style,
+ lightswitch->window,
+ (priv->active) ? GTK_STATE_SELECTED : GTK_STATE_NORMAL,
+ FALSE,
+ NULL,
+ (GtkWidget*) lightswitch,
+ "lightswitch-label",
+ on_label_x,
+ (priv->switch_height
+ - (label_height / PANGO_SCALE)) / 2,
+ layout);
+
+ pango_layout_set_text (layout, OFF_STRING, -1);
+ pango_layout_get_size (layout,
+ &label_width,
+ &label_height);
+ gtk_paint_layout (style,
+ lightswitch->window,
+ (priv->active) ? GTK_STATE_SELECTED : GTK_STATE_NORMAL,
+ FALSE,
+ NULL,
+ (GtkWidget*) lightswitch,
+ "lightswitch-label",
+ off_label_x,
+ (priv->switch_height
+ - (label_height / PANGO_SCALE)) / 2,
+ layout);
+ g_object_unref (layout);
+#endif
+ /* draw the switch itself */
+ gtk_paint_box (style,
+ lightswitch->window,
+#if GTK_CHECK_VERSION (2,19,5)
+ gtk_widget_get_state (lightswitch),
+#else
+ GTK_WIDGET_STATE (lightswitch),
+#endif
+ GTK_SHADOW_OUT,
+ NULL,
+ NULL,
+ "light-switch-handle",
+ priv->x + style->xthickness,
+ style->ythickness,
+ priv->switch_width - style->xthickness * 2,
+ priv->switch_height - style->ythickness * 2);
+
+}
+
+static void
+mx_gtk_light_switch_size_request (GtkWidget *lightswitch,
+ GtkRequisition *req)
+{
+ MxGtkLightSwitchPrivate *priv = MX_GTK_LIGHT_SWITCH_GET_PRIVATE (lightswitch);
+
+ req->height = priv->switch_height;
+ req->width = priv->trough_width;
+}
+
+static void
+mx_gtk_light_switch_style_set (GtkWidget *lightswitch,
+ GtkStyle *previous_style)
+{
+ MxGtkLightSwitchPrivate *priv = MX_GTK_LIGHT_SWITCH_GET_PRIVATE (lightswitch);
+ PangoLayout *layout;
+ gint label_width, label_height;
+
+ layout = gtk_widget_create_pango_layout (GTK_WIDGET (lightswitch), NULL);
+ pango_layout_set_text (layout, UNAVAILABLE_STRING, -1);
+ pango_layout_get_pixel_size (layout, &label_width, &label_height);
+ g_object_unref (layout);
+
+ /* MxToggle is 105x39, so make sure light-switch is at least this size */
+ priv->trough_width = MAX (103, label_width);
+ priv->switch_width = (priv->trough_width / 2) * 1.1;
+ //priv->switch_height = MAX (39, label_height);
+ priv->switch_height = 24;
+ priv->switch_width = 50;
+ priv->trough_width = 98;
+}
+
+static gboolean
+mx_gtk_light_switch_configure (GtkWidget *lightswitch,
+ GdkEventConfigure *event)
+{
+ MxGtkLightSwitchPrivate *priv = MX_GTK_LIGHT_SWITCH_GET_PRIVATE (lightswitch);
+
+ if (priv->active)
+ priv->x = priv->trough_width - priv->switch_width;
+ else
+ priv->x = 0;
+
+ return FALSE;
+}
+
+static gboolean
+mx_gtk_light_switch_expose (GtkWidget *lightswitch,
+ GdkEventExpose *event)
+{
+ cairo_t *cr;
+ cr = gdk_cairo_create (lightswitch->window);
+
+ cairo_rectangle (cr,
+ event->area.x,
+ event->area.y,
+ event->area.width,
+ event->area.height);
+
+ cairo_clip (cr);
+
+ draw (lightswitch, cr);
+
+ cairo_destroy (cr);
+
+ return FALSE;
+}
+
+static gboolean
+mx_gtk_light_switch_motion_notify (GtkWidget *lightswitch,
+ GdkEventMotion *event)
+{
+ MxGtkLightSwitchPrivate *priv;
+
+ priv = MX_GTK_LIGHT_SWITCH_GET_PRIVATE (lightswitch);
+
+ if (ABS (event->x - priv->drag_start) < priv->drag_threshold)
+ return TRUE;
+
+ if (event->state & GDK_BUTTON1_MASK)
+ {
+ gint position = event->x - priv->offset;
+
+ if (position > (priv->trough_width - priv->switch_width))
+ priv->x = (priv->trough_width - priv->switch_width);
+ else if (position < 0)
+ priv->x = 0;
+ else
+ priv->x = position;
+
+ priv->dragging = TRUE;
+ gtk_widget_queue_draw ((GtkWidget *) lightswitch);
+ }
+
+ return TRUE;
+}
+
+/**
+ * mx_gtk_light_switch_get_active:
+ * @lightswitch: A #MxGtkLightSwitch
+ *
+ * Get the value of the "active" property
+ *
+ * Returns: #TRUE if the switch is "on"
+ */
+gboolean
+mx_gtk_light_switch_get_active (MxGtkLightSwitch *lightswitch)
+{
+ MxGtkLightSwitchPrivate *priv = MX_GTK_LIGHT_SWITCH_GET_PRIVATE (lightswitch);
+
+ return priv->active;
+}
+
+/**
+ * mx_gtk_light_switch_set_active:
+ * @lightswitch: A #MxGtkLightSwitch
+ * @active: #TRUE to set the switch to its ON state
+ *
+ * Set the value of the "active" property
+ *
+ */
+void
+mx_gtk_light_switch_set_active (MxGtkLightSwitch *lightswitch,
+ gboolean active)
+{
+ MxGtkLightSwitchPrivate *priv = MX_GTK_LIGHT_SWITCH_GET_PRIVATE (lightswitch);
+
+ if (priv->active == active)
+ {
+ return;
+ }
+ else
+ {
+ priv->active = active;
+ if (active == TRUE)
+ {
+ priv->x = priv->trough_width - priv->switch_width;
+ }
+ else
+ {
+ priv->x = 0;
+ }
+
+ gtk_widget_queue_draw ((GtkWidget *) lightswitch);
+
+ g_object_notify (G_OBJECT (lightswitch), "active");
+ g_signal_emit (lightswitch,
+ mx_gtk_light_switch_signals[SWITCH_FLIPPED],
+ 0,
+ priv->active);
+ }
+}
+
+static gboolean
+mx_gtk_light_switch_button_press (GtkWidget *lightswitch,
+ GdkEventButton *event)
+{
+ MxGtkLightSwitchPrivate *priv = MX_GTK_LIGHT_SWITCH_GET_PRIVATE (lightswitch);
+
+ if (priv->active)
+ priv->offset = event->x - (priv->trough_width - priv->switch_width);
+ else
+ priv->offset = event->x;
+
+ priv->drag_start = event->x;
+
+ g_object_get (gtk_widget_get_settings (lightswitch),
+ "gtk-dnd-drag-threshold", &priv->drag_threshold,
+ NULL);
+
+ return FALSE;
+}
+
+static gboolean
+mx_gtk_light_switch_button_release (GtkWidget *lightswitch,
+ GdkEventButton *event)
+{
+ MxGtkLightSwitchPrivate *priv;
+
+ priv = MX_GTK_LIGHT_SWITCH_GET_PRIVATE (lightswitch);
+
+ /* detect whereabouts we are and "drop" into a state */
+ if (priv->dragging)
+ {
+ priv->dragging = FALSE;
+ if (priv->x + (priv->switch_width / 2) > priv->trough_width / 2)
+ {
+ mx_gtk_light_switch_set_active ((MxGtkLightSwitch *) lightswitch, TRUE);
+ priv->x = priv->trough_width - priv->switch_width;
+ }
+ else
+ {
+ mx_gtk_light_switch_set_active ((MxGtkLightSwitch *) lightswitch, FALSE);
+ priv->x = 0;
+ }
+ /* we always need to queue a redraw after dragging to put the slider back
+ * in the correct place */
+ gtk_widget_queue_draw ((GtkWidget *) lightswitch);
+ }
+ else
+ {
+ mx_gtk_light_switch_set_active ((MxGtkLightSwitch *) lightswitch, !priv->active);
+ }
+
+ return FALSE;
+}
+
+/**
+ * mx_gtk_light_switch_new:
+ *
+ * Create a #MxGtkLightSwitch
+ *
+ * Returns: a newly allocated #MxGtkLightSwitch
+ */
+GtkWidget*
+mx_gtk_light_switch_new (void)
+{
+ return g_object_new (MX_GTK_TYPE_LIGHT_SWITCH, NULL);
+}
+
diff --git a/libempathy-gtk/mx-gtk-light-switch.h b/libempathy-gtk/mx-gtk-light-switch.h
new file mode 100644
index 0000000..88fdf69
--- /dev/null
+++ b/libempathy-gtk/mx-gtk-light-switch.h
@@ -0,0 +1,71 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+/*
+ * Copyright 2009 Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU Lesser General Public License,
+ * version 2.1, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ * Boston, MA 02111-1307, USA.
+ *
+ */
+#ifndef _MX_GTK_LIGHT_SWITCH
+#define _MX_GTK_LIGHT_SWITCH
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define MX_GTK_TYPE_LIGHT_SWITCH mx_gtk_light_switch_get_type ()
+
+#define MX_GTK_LIGHT_SWITCH(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), MX_GTK_TYPE_LIGHT_SWITCH, MxGtkLightSwitch))
+
+#define MX_GTK_LIGHT_SWITCH_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), MX_GTK_TYPE_LIGHT_SWITCH, MxGtkLightSwitchClass))
+
+#define MX_GTK_IS_LIGHT_SWITCH(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MX_GTK_TYPE_LIGHT_SWITCH))
+
+#define MX_GTK_IS_LIGHT_SWITCH_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), MX_GTK_TYPE_LIGHT_SWITCH))
+
+#define MX_GTK_LIGHT_SWITCH_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), MX_GTK_TYPE_LIGHT_SWITCH, MxGtkLightSwitchClass))
+
+/**
+ * MxGtkLightSwitch:
+ *
+ * The contents of this structure are private and should only be accessed
+ * through the public API.
+ */
+typedef struct {
+ /*< private >*/
+ GtkDrawingArea parent;
+} MxGtkLightSwitch;
+
+typedef struct {
+ GtkDrawingAreaClass parent_class;
+
+ void (*switch_flipped) (MxGtkLightSwitch *lightswitch, gboolean state);
+} MxGtkLightSwitchClass;
+
+GType mx_gtk_light_switch_get_type (void);
+
+void mx_gtk_light_switch_set_active (MxGtkLightSwitch *lightswitch,
+ gboolean active);
+gboolean mx_gtk_light_switch_get_active (MxGtkLightSwitch *lightswitch);
+
+GtkWidget* mx_gtk_light_switch_new (void);
+
+G_END_DECLS
+
+#endif /* _MX_GTK_LIGHT_SWITCH */
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 2311bb0..4b5af18 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -72,6 +72,7 @@ libempathy-gtk/empathy-theme-manager.c
libempathy-gtk/empathy-tls-dialog.c
libempathy-gtk/empathy-ui-utils.c
libempathy-gtk/totem-subtitle-encoding.c
+libempathy-gtk/mx-gtk-light-switch.c
nautilus-sendto-plugin/empathy-nautilus-sendto.c
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]