girara
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
entry.c
Go to the documentation of this file.
1 #include "entry.h"
2 
3 #include <stdbool.h>
4 
5 G_DEFINE_TYPE(GiraraEntry, girara_entry, GTK_TYPE_ENTRY)
6 
7 static void girara_entry_paste_primary(GiraraEntry* self);
8 
9 enum {
12 };
13 
14 static guint signals[LAST_SIGNAL] = { 0 };
15 
16 static void
17 girara_entry_class_init(GiraraEntryClass* klass)
18 {
19  klass->paste_primary = girara_entry_paste_primary;
20 
21  signals[PASTE_PRIMARY] =
22  g_signal_new("paste-primary",
24  G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
25  G_STRUCT_OFFSET(GiraraEntryClass, paste_primary),
26  NULL, NULL,
27  g_cclosure_marshal_generic,
28  G_TYPE_NONE, 0);
29 
30  GtkBindingSet* binding_set = gtk_binding_set_by_class(klass);
31  gtk_binding_entry_add_signal(binding_set, GDK_KEY_Insert, GDK_SHIFT_MASK,
32  "paste-primary", 0);
33 }
34 
35 static void
36 girara_entry_init(GiraraEntry* GIRARA_UNUSED(self))
37 {
38 }
39 
40 GiraraEntry*
42 {
43  GObject* ret = g_object_new(GIRARA_TYPE_ENTRY, NULL);
44  if (ret == NULL) {
45  return NULL;
46  }
47 
48  return GIRARA_ENTRY(ret);
49 }
50 
51 static void
52 girara_entry_paste_primary(GiraraEntry* self)
53 {
54  GValue editable = G_VALUE_INIT;
55  g_value_init(&editable, G_TYPE_BOOLEAN);
56 
57  g_object_get_property(G_OBJECT(self), "editable", &editable);
58 
59  if (g_value_get_boolean(&editable) == true) {
60  gchar* text = gtk_clipboard_wait_for_text(gtk_clipboard_get(GDK_SELECTION_PRIMARY));
61 
62  if (text != NULL) {
63  int pos = gtk_editable_get_position(GTK_EDITABLE(self));
64 
65  gtk_editable_insert_text(GTK_EDITABLE(self), text, -1, &pos);
66  gtk_editable_set_position(GTK_EDITABLE(self), pos);
67  }
68  } else {
69  gtk_widget_error_bell(GTK_WIDGET(self));
70  }
71 }
Definition: entry.c:11
#define GIRARA_TYPE_ENTRY
Definition: entry.h:10
#define GIRARA_UNUSED(x)
Definition: macros.h:21
GiraraEntry * girara_entry_new(void)
Definition: entry.c:41
#define GIRARA_ENTRY(obj)
Definition: entry.h:12
Definition: entry.c:10