glade-accumulators.c 2.96 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/*
 * glade-clipboard.c - An object for handling Cut/Copy/Paste.
 *
 * Copyright (C) 2005 The GNOME Foundation.
 *
 * Author(s):
 *      Tristan Van Berkom <tvb@gnome.org>
 *
 * 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
20 21 22
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
 * USA.
23
 */
Christian Persch's avatar
Christian Persch committed
24 25 26

#include "config.h"

27 28
#include "glade-accumulators.h"

29 30 31 32
#include <glib-object.h>


gboolean
33 34 35
_glade_single_object_accumulator (GSignalInvocationHint *ihint,
				  GValue *return_accu,
				  const GValue *handler_return, gpointer dummy)
36
{
37 38 39 40
  GObject *object = g_value_get_object (handler_return);
  g_value_set_object (return_accu, object);

  return (object == NULL);
41 42
}

43
gboolean
44 45 46
_glade_integer_handled_accumulator (GSignalInvocationHint *ihint,
				    GValue *return_accu,
				    const GValue *handler_return,
47
				    gpointer dummy)
48
{
49 50 51 52 53 54 55 56
  gboolean continue_emission;
  gint retval;

  retval = g_value_get_int (handler_return);
  g_value_set_int (return_accu, retval >> 1);
  continue_emission = !(retval & 1);

  return continue_emission;
57 58
}

59 60
/* From gtkmain.c */
gboolean
61 62 63
_glade_boolean_handled_accumulator (GSignalInvocationHint *ihint,
				    GValue *return_accu,
				    const GValue *handler_return,
64
				    gpointer dummy)
65
{
66 67 68 69 70 71 72 73
  gboolean continue_emission;
  gboolean signal_handled;

  signal_handled = g_value_get_boolean (handler_return);
  g_value_set_boolean (return_accu, signal_handled);
  continue_emission = !signal_handled;

  return continue_emission;
74
}
75 76

gboolean
77 78 79
_glade_string_accumulator (GSignalInvocationHint *ihint,
			   GValue *return_accu,
			   const GValue *handler_return, gpointer dummy)
80
{
81 82 83 84 85 86 87 88
  const gchar *handler_str;

  g_free ((void *) g_value_get_string (return_accu));

  handler_str = g_value_get_string (handler_return);
  g_value_set_string (return_accu, handler_str);

  return (handler_str == NULL);
89 90 91
}

gboolean
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
_glade_strv_handled_accumulator (GSignalInvocationHint *ihint,
                                 GValue *return_accu,
                                 const GValue *handler_return, gpointer dummy)
{
  const gchar **handler_strv;

  handler_strv = g_value_get_boxed (handler_return);
  g_value_set_boxed (return_accu, handler_strv);

  return (handler_strv == NULL);
}

gboolean
_glade_stop_emission_accumulator (GSignalInvocationHint *ihint,
				  GValue *return_accu,
				  const GValue *handler_return, gpointer dummy)
108
{
109 110 111
  g_value_copy (handler_return, return_accu);

  return FALSE;
112
}