diff options
author | Xavier Claessens <xclaesse@src.gnome.org> | 2007-09-09 05:38:21 +0800 |
---|---|---|
committer | Xavier Claessens <xclaesse@src.gnome.org> | 2007-09-09 05:38:21 +0800 |
commit | ea771f7f422706c9ab39710958a7ead37bf6add3 (patch) | |
tree | 5a52a3f8259a0e6c929e173a175fa677e3afc957 /libempathy-gtk/empathy-cell-renderer-activatable.c | |
parent | 3ab538f85f2ec8fe2ffdb31957c341596d615e07 (diff) | |
download | gsoc2013-empathy-ea771f7f422706c9ab39710958a7ead37bf6add3.tar gsoc2013-empathy-ea771f7f422706c9ab39710958a7ead37bf6add3.tar.gz gsoc2013-empathy-ea771f7f422706c9ab39710958a7ead37bf6add3.tar.bz2 gsoc2013-empathy-ea771f7f422706c9ab39710958a7ead37bf6add3.tar.lz gsoc2013-empathy-ea771f7f422706c9ab39710958a7ead37bf6add3.tar.xz gsoc2013-empathy-ea771f7f422706c9ab39710958a7ead37bf6add3.tar.zst gsoc2013-empathy-ea771f7f422706c9ab39710958a7ead37bf6add3.zip |
forgot to add those files
svn path=/trunk/; revision=293
Diffstat (limited to 'libempathy-gtk/empathy-cell-renderer-activatable.c')
-rw-r--r-- | libempathy-gtk/empathy-cell-renderer-activatable.c | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/libempathy-gtk/empathy-cell-renderer-activatable.c b/libempathy-gtk/empathy-cell-renderer-activatable.c new file mode 100644 index 000000000..926b8cffa --- /dev/null +++ b/libempathy-gtk/empathy-cell-renderer-activatable.c @@ -0,0 +1,122 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 2007 Raphael Slinckx <raphael@slinckx.net> + * Copyright (C) 2007 Collabora Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Authors: Raphael Slinckx <raphael@slinckx.net> + */ + +#include <gtk/gtktreeview.h> + +#include <libempathy/empathy-debug.h> + +#include "empathy-cell-renderer-activatable.h" + +#define DEBUG_DOMAIN "CellRendererActivatable" + +static void empathy_cell_renderer_activatable_init (EmpathyCellRendererActivatable *cell); +static void empathy_cell_renderer_activatable_class_init (EmpathyCellRendererActivatableClass *klass); +static gboolean cell_renderer_activatable_activate (GtkCellRenderer *cell, + GdkEvent *event, + GtkWidget *widget, + const gchar *path, + GdkRectangle *background_area, + GdkRectangle *cell_area, + GtkCellRendererState flags); + +enum { + PATH_ACTIVATED, + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL]; + +G_DEFINE_TYPE (EmpathyCellRendererActivatable, empathy_cell_renderer_activatable, GTK_TYPE_CELL_RENDERER_PIXBUF) + +static void +empathy_cell_renderer_activatable_init (EmpathyCellRendererActivatable *cell) +{ + g_object_set (cell, + "xpad", 0, + "ypad", 0, + "mode", GTK_CELL_RENDERER_MODE_ACTIVATABLE, + "follow-state", TRUE, + NULL); +} + +static void +empathy_cell_renderer_activatable_class_init (EmpathyCellRendererActivatableClass *klass) +{ + GtkCellRendererClass *cell_class; + + cell_class = GTK_CELL_RENDERER_CLASS (klass); + cell_class->activate = cell_renderer_activatable_activate; + + signals[PATH_ACTIVATED] = + g_signal_new ("path-activated", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__STRING, + G_TYPE_NONE, + 1, G_TYPE_STRING); +} + +GtkCellRenderer * +empathy_cell_renderer_activatable_new (void) +{ + return g_object_new (EMPATHY_TYPE_CELL_RENDERER_ACTIVATABLE, NULL); +} + +static gboolean +cell_renderer_activatable_activate (GtkCellRenderer *cell, + GdkEvent *event, + GtkWidget *widget, + const gchar *path_string, + GdkRectangle *background_area, + GdkRectangle *cell_area, + GtkCellRendererState flags) +{ + EmpathyCellRendererActivatable *activatable; + gint ex, ey, bx, by, bw, bh; + + activatable = EMPATHY_CELL_RENDERER_ACTIVATABLE (cell); + + if (!GTK_IS_TREE_VIEW (widget) || + event->type != GDK_BUTTON_PRESS) { + return FALSE; + } + + ex = (gint) ((GdkEventButton *) event)->x; + ey = (gint) ((GdkEventButton *) event)->y; + bx = background_area->x; + by = background_area->y; + bw = background_area->width; + bh = background_area->height; + + if (ex < bx || ex > (bx+bw) || ey < by || ey > (by+bh)){ + /* Click wasn't on the icon */ + return FALSE; + } + + g_signal_emit (activatable, signals[PATH_ACTIVATED], 0, path_string); + + return TRUE; +} + |