ruby-libnotify 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/AUTHORS.rdoc +4 -0
- data/CHANGELOG.rdoc +55 -0
- data/COPYING +504 -0
- data/README.rdoc +46 -0
- data/doc/classes/Notify.html +343 -0
- data/doc/classes/Notify.src/M000001.html +39 -0
- data/doc/classes/Notify.src/M000002.html +24 -0
- data/doc/classes/Notify.src/M000003.html +25 -0
- data/doc/classes/Notify.src/M000004.html +24 -0
- data/doc/classes/Notify.src/M000005.html +37 -0
- data/doc/classes/Notify.src/M000006.html +55 -0
- data/doc/classes/Notify/Notification.html +787 -0
- data/doc/classes/Notify/Notification.src/M000007.html +65 -0
- data/doc/classes/Notify/Notification.src/M000008.html +49 -0
- data/doc/classes/Notify/Notification.src/M000009.html +43 -0
- data/doc/classes/Notify/Notification.src/M000010.html +35 -0
- data/doc/classes/Notify/Notification.src/M000011.html +33 -0
- data/doc/classes/Notify/Notification.src/M000012.html +36 -0
- data/doc/classes/Notify/Notification.src/M000013.html +48 -0
- data/doc/classes/Notify/Notification.src/M000014.html +36 -0
- data/doc/classes/Notify/Notification.src/M000015.html +38 -0
- data/doc/classes/Notify/Notification.src/M000016.html +38 -0
- data/doc/classes/Notify/Notification.src/M000017.html +39 -0
- data/doc/classes/Notify/Notification.src/M000018.html +38 -0
- data/doc/classes/Notify/Notification.src/M000019.html +45 -0
- data/doc/classes/Notify/Notification.src/M000020.html +67 -0
- data/doc/classes/Notify/Notification.src/M000021.html +33 -0
- data/doc/classes/Notify/Notification.src/M000022.html +33 -0
- data/doc/classes/Notify/Notification.src/M000023.html +36 -0
- data/doc/classes/Notify/Notification.src/M000024.html +34 -0
- data/doc/created.rid +1 -0
- data/doc/files/lib/RNotify_rb.html +102 -0
- data/doc/files/rnotify_c.html +90 -0
- data/doc/fr_class_index.html +27 -0
- data/doc/fr_file_index.html +27 -0
- data/doc/fr_method_index.html +71 -0
- data/doc/index.html +21 -0
- data/doc/rdoc-style.css +299 -0
- data/examples/action.rb +39 -0
- data/examples/attach_to.rb +43 -0
- data/examples/attach_to_status_icon.rb +47 -0
- data/examples/base.rb +29 -0
- data/examples/geometry-hints.rb +37 -0
- data/examples/icon.png +0 -0
- data/examples/info.rb +27 -0
- data/examples/markup.rb +29 -0
- data/examples/multi-actions.rb +44 -0
- data/examples/update.rb +36 -0
- data/examples/urgency.rb +47 -0
- data/examples/xy.rb +32 -0
- data/ext/extconf.rb +67 -0
- data/ext/rnotify.c +814 -0
- data/lib/RNotify.rb +15 -0
- data/setup.rb +1333 -0
- metadata +120 -0
data/ext/rnotify.c
ADDED
@@ -0,0 +1,814 @@
|
|
1
|
+
//
|
2
|
+
// rnotify.c
|
3
|
+
//
|
4
|
+
// Luca Russo <vargolo@gmail.com>
|
5
|
+
// Copyright (LGPL) 2006 - 2010
|
6
|
+
//
|
7
|
+
|
8
|
+
#include <libnotify/notify.h>
|
9
|
+
#include "ruby.h"
|
10
|
+
#include "rbgobject.h"
|
11
|
+
|
12
|
+
#define MODULE_NAME "Notify"
|
13
|
+
#define CLASS_NAME "Notification"
|
14
|
+
|
15
|
+
typedef struct _ActionData ActionData;
|
16
|
+
struct _ActionData
|
17
|
+
{
|
18
|
+
VALUE callback;
|
19
|
+
VALUE action;
|
20
|
+
VALUE user_data;
|
21
|
+
};
|
22
|
+
|
23
|
+
static void
|
24
|
+
_notification_action_cb(NotifyNotification *notify, const char *action,
|
25
|
+
ActionData *data)
|
26
|
+
{
|
27
|
+
ActionData *tmp = data;
|
28
|
+
|
29
|
+
if(tmp->user_data == Qnil)
|
30
|
+
rb_funcall(tmp->callback, rb_intern("call"), 1, tmp->action);
|
31
|
+
else
|
32
|
+
rb_funcall(tmp->callback, rb_intern("call"), 2, tmp->action, tmp->user_data);
|
33
|
+
}
|
34
|
+
|
35
|
+
static void
|
36
|
+
_notification_action_free(ActionData *data)
|
37
|
+
{
|
38
|
+
if(data != NULL)
|
39
|
+
g_free(data);
|
40
|
+
}
|
41
|
+
|
42
|
+
static void
|
43
|
+
_wrap_alloc_free(VALUE self)
|
44
|
+
{
|
45
|
+
NotifyNotification *n = NOTIFY_NOTIFICATION(RVAL2GOBJ(self));
|
46
|
+
|
47
|
+
if(n != NULL)
|
48
|
+
{
|
49
|
+
g_object_unref(G_OBJECT(n));
|
50
|
+
n = NULL;
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
/*
|
55
|
+
* call-seq:
|
56
|
+
* init(name)
|
57
|
+
*
|
58
|
+
* name = application name (required)
|
59
|
+
*
|
60
|
+
* Initialize libnotify. This must be called before any other functions.
|
61
|
+
* Throw an expection If name is empty or nil
|
62
|
+
*
|
63
|
+
* Returns TRUE if the library initialized properly, FALSE otherwise
|
64
|
+
*/
|
65
|
+
static VALUE
|
66
|
+
_wrap_notify_init(VALUE self, VALUE app_name)
|
67
|
+
{
|
68
|
+
gboolean init;
|
69
|
+
char *name = NIL_P(app_name) ? NULL : StringValuePtr(app_name);
|
70
|
+
|
71
|
+
if(name == NULL || *name == '\0')
|
72
|
+
rb_raise(rb_eRuntimeError,
|
73
|
+
"You MUST call this method with a valid string that will be used as Application name");
|
74
|
+
else
|
75
|
+
init = notify_init(name);
|
76
|
+
|
77
|
+
if(init == TRUE)
|
78
|
+
return Qtrue;
|
79
|
+
|
80
|
+
return Qfalse;
|
81
|
+
}
|
82
|
+
|
83
|
+
/*
|
84
|
+
* call-seq:
|
85
|
+
* uninit
|
86
|
+
*
|
87
|
+
* Deinitialize libnotify, you must to call this before quit the program
|
88
|
+
*/
|
89
|
+
static VALUE
|
90
|
+
_wrap_notify_uninit(VALUE self)
|
91
|
+
{
|
92
|
+
notify_uninit();
|
93
|
+
|
94
|
+
return Qnil;
|
95
|
+
}
|
96
|
+
|
97
|
+
/*
|
98
|
+
* call-seq:
|
99
|
+
* init?
|
100
|
+
*
|
101
|
+
* Returns TRUE if libnotify is inizialized, FALSE otherwise
|
102
|
+
*/
|
103
|
+
static VALUE
|
104
|
+
_wrap_notify_is_initted(VALUE self)
|
105
|
+
{
|
106
|
+
if(notify_is_initted())
|
107
|
+
return Qtrue;
|
108
|
+
|
109
|
+
return Qfalse;
|
110
|
+
}
|
111
|
+
|
112
|
+
/*
|
113
|
+
* call-seq:
|
114
|
+
* app_name
|
115
|
+
*
|
116
|
+
* Returns the application name passed to Notify.init
|
117
|
+
*/
|
118
|
+
static VALUE
|
119
|
+
_wrap_notify_get_app_name(VALUE self)
|
120
|
+
{
|
121
|
+
const gchar *name = notify_get_app_name();
|
122
|
+
|
123
|
+
return rb_str_new2(name);
|
124
|
+
}
|
125
|
+
|
126
|
+
/*
|
127
|
+
* call-seq:
|
128
|
+
* server_caps
|
129
|
+
*
|
130
|
+
* Queries the server for its capabilities and returns them in an Array
|
131
|
+
*/
|
132
|
+
static VALUE
|
133
|
+
_wrap_notify_get_server_caps(VALUE self)
|
134
|
+
{
|
135
|
+
GList *caps = NULL;
|
136
|
+
VALUE rb_caps;
|
137
|
+
|
138
|
+
caps = notify_get_server_caps();
|
139
|
+
rb_caps = rb_ary_new();
|
140
|
+
|
141
|
+
do
|
142
|
+
{
|
143
|
+
rb_ary_push(rb_caps, rb_str_new2(caps->data));
|
144
|
+
caps = caps->next;
|
145
|
+
} while(caps != NULL);
|
146
|
+
|
147
|
+
g_list_foreach(caps, (GFunc)g_free, NULL);
|
148
|
+
g_list_free(caps);
|
149
|
+
|
150
|
+
return rb_caps;
|
151
|
+
}
|
152
|
+
|
153
|
+
/*
|
154
|
+
* call-seq:
|
155
|
+
* server_info
|
156
|
+
*
|
157
|
+
* Queries the server for its information (name, vendor, server version,
|
158
|
+
* notification version)
|
159
|
+
*
|
160
|
+
* Returns FALSE if there were errors, an Hash otherwise
|
161
|
+
*
|
162
|
+
* example:
|
163
|
+
*
|
164
|
+
* h = Notify.server_info
|
165
|
+
* p h[:name] #print the product name of the server
|
166
|
+
* p h[:vendor] #print the vendor
|
167
|
+
* p h[:version] #print the server version
|
168
|
+
* p h[:spec_version] #print the specification version supported
|
169
|
+
*/
|
170
|
+
static VALUE
|
171
|
+
_wrap_notify_get_server_info(VALUE self)
|
172
|
+
{
|
173
|
+
gchar *serv_name = NULL,
|
174
|
+
*vendor = NULL,
|
175
|
+
*serv_version = NULL,
|
176
|
+
*spec_vers = NULL;
|
177
|
+
VALUE rb_info;
|
178
|
+
|
179
|
+
if(!notify_get_server_info(&serv_name, &vendor, &serv_version, &spec_vers))
|
180
|
+
return Qfalse;
|
181
|
+
else
|
182
|
+
{
|
183
|
+
rb_info = rb_hash_new();
|
184
|
+
rb_hash_aset(rb_info, ID2SYM(rb_intern("name")), rb_str_new2(serv_name));
|
185
|
+
rb_hash_aset(rb_info, ID2SYM(rb_intern("vendor")), rb_str_new2(vendor));
|
186
|
+
rb_hash_aset(rb_info, ID2SYM(rb_intern("version")), rb_str_new2(serv_version));
|
187
|
+
rb_hash_aset(rb_info, ID2SYM(rb_intern("spec_version")), rb_str_new2(spec_vers));
|
188
|
+
|
189
|
+
g_free(serv_name);
|
190
|
+
g_free(vendor);
|
191
|
+
g_free(serv_version);
|
192
|
+
g_free(spec_vers);
|
193
|
+
}
|
194
|
+
|
195
|
+
return rb_info;
|
196
|
+
}
|
197
|
+
|
198
|
+
/*
|
199
|
+
* call-seq:
|
200
|
+
* new(summ, msg, icon, widget)
|
201
|
+
*
|
202
|
+
* summ = The summary text (required)
|
203
|
+
*
|
204
|
+
* msg = The body text or nil
|
205
|
+
*
|
206
|
+
* icon = The icon or nil
|
207
|
+
*
|
208
|
+
* widget = The widget (or a Gtk::StatusIcon, when compiled against GTK+ >= 2.9.2 and libnotify >= 0.4.1) to attach to or nil
|
209
|
+
*
|
210
|
+
* Creates and returns a new notification, throw an exception on error
|
211
|
+
*/
|
212
|
+
static VALUE
|
213
|
+
_wrap_notification_init(VALUE self, VALUE summ, VALUE msg,
|
214
|
+
VALUE icon, VALUE widget)
|
215
|
+
{
|
216
|
+
GObject *obj = G_OBJECT(RVAL2GOBJ(widget));
|
217
|
+
char *nsumm = NIL_P(summ) ? NULL : StringValuePtr(summ);
|
218
|
+
NotifyNotification *n = NULL;
|
219
|
+
|
220
|
+
if(nsumm == NULL || *nsumm == '\0')
|
221
|
+
rb_raise( rb_eArgError, "REQUIRED: the `summ` field" );
|
222
|
+
|
223
|
+
#ifdef HAVE_STATUS_ICON
|
224
|
+
if(GTK_IS_STATUS_ICON(obj))
|
225
|
+
n = notify_notification_new_with_status_icon(nsumm,
|
226
|
+
NIL_P(msg) ? NULL : StringValuePtr(msg),
|
227
|
+
NIL_P(icon) ? NULL : StringValuePtr(icon),
|
228
|
+
GTK_STATUS_ICON(obj));
|
229
|
+
else
|
230
|
+
n = notify_notification_new(nsumm,
|
231
|
+
NIL_P(msg) ? NULL : StringValuePtr(msg),
|
232
|
+
NIL_P(icon) ? NULL : StringValuePtr(icon),
|
233
|
+
GTK_WIDGET(obj));
|
234
|
+
#else
|
235
|
+
n = notify_notification_new(nsumm,
|
236
|
+
NIL_P(msg) ? NULL : StringValuePtr(msg),
|
237
|
+
NIL_P(icon) ? NULL : StringValuePtr(icon),
|
238
|
+
GTK_WIDGET(obj));
|
239
|
+
#endif
|
240
|
+
|
241
|
+
if(n == NULL)
|
242
|
+
rb_raise(rb_eRuntimeError, "Can not create a new notification");
|
243
|
+
|
244
|
+
G_INITIALIZE(self, n);
|
245
|
+
|
246
|
+
#ifdef DEBUG
|
247
|
+
rb_warn("init, ok");
|
248
|
+
#endif
|
249
|
+
|
250
|
+
return self;
|
251
|
+
}
|
252
|
+
|
253
|
+
/*
|
254
|
+
* call-seq:
|
255
|
+
* update(summ, msg, icon)
|
256
|
+
*
|
257
|
+
* summ = The new summary text (required)
|
258
|
+
*
|
259
|
+
* msg = The new body text or nil
|
260
|
+
*
|
261
|
+
* icon = The new icon or nil
|
262
|
+
*
|
263
|
+
* This won't send the update out and display it on the screen.
|
264
|
+
* For that, you will need to call the Notification#show method.
|
265
|
+
*
|
266
|
+
* Returns TRUE if ok, FALSE otherwise
|
267
|
+
*/
|
268
|
+
static VALUE
|
269
|
+
_wrap_notification_update(VALUE self, VALUE summ, VALUE msg, VALUE icon)
|
270
|
+
{
|
271
|
+
NotifyNotification *n = NOTIFY_NOTIFICATION(RVAL2GOBJ(self));
|
272
|
+
char *nsumm = NIL_P(summ) ? NULL : StringValuePtr(summ);
|
273
|
+
char *nmsg = NIL_P(msg) ? NULL : StringValuePtr(msg);
|
274
|
+
char *nicon = NIL_P(icon) ? NULL : StringValuePtr(icon);
|
275
|
+
|
276
|
+
#ifdef DEBUG
|
277
|
+
if(NOTIFY_IS_NOTIFICATION(n))
|
278
|
+
rb_warn("update, ok");
|
279
|
+
else
|
280
|
+
rb_warn("update, no ok");
|
281
|
+
#endif
|
282
|
+
|
283
|
+
if(nsumm == NULL || *nsumm == '\0')
|
284
|
+
rb_raise(rb_eArgError, "REQUIRED: the `summ` field");
|
285
|
+
|
286
|
+
if(notify_notification_update(n, nsumm, nmsg, nicon) == TRUE)
|
287
|
+
return Qtrue;
|
288
|
+
|
289
|
+
return Qfalse;
|
290
|
+
}
|
291
|
+
|
292
|
+
/*
|
293
|
+
* call-seq:
|
294
|
+
* attach_to(widget)
|
295
|
+
*
|
296
|
+
* widget = The widget (or a Gtk::StatusIcon, when compiled against GTK+ >= 2.9.2 and libnotify >= 0.4.1) to attach to
|
297
|
+
*
|
298
|
+
* Attaches the notification to a Gtk::Widget or Gtk::StatusIcon
|
299
|
+
*/
|
300
|
+
static VALUE
|
301
|
+
_wrap_notification_attach_to(VALUE self, VALUE widget)
|
302
|
+
{
|
303
|
+
GObject *obj = G_OBJECT(RVAL2GOBJ(widget));
|
304
|
+
NotifyNotification *n = NOTIFY_NOTIFICATION(RVAL2GOBJ(self));
|
305
|
+
|
306
|
+
#ifdef DEBUG
|
307
|
+
if(NOTIFY_IS_NOTIFICATION(n))
|
308
|
+
rb_warn("attach_to, ok");
|
309
|
+
else
|
310
|
+
rb_warn("attach_to, no ok");
|
311
|
+
#endif
|
312
|
+
|
313
|
+
#ifdef HAVE_STATUS_ICON
|
314
|
+
if(GTK_IS_STATUS_ICON(obj))
|
315
|
+
notify_notification_attach_to_status_icon(n, GTK_STATUS_ICON(obj));
|
316
|
+
else
|
317
|
+
notify_notification_attach_to_widget(n, GTK_WIDGET(obj));
|
318
|
+
#else
|
319
|
+
notify_notification_attach_to_widget(n, GTK_WIDGET(obj));
|
320
|
+
#endif
|
321
|
+
|
322
|
+
return Qnil;
|
323
|
+
}
|
324
|
+
|
325
|
+
/*
|
326
|
+
* call-seq:
|
327
|
+
* show
|
328
|
+
*
|
329
|
+
* Tells the notification server to display the notification on the screen.
|
330
|
+
* if TRUE returns, show the notification otherwise returns FALSE
|
331
|
+
*/
|
332
|
+
static VALUE
|
333
|
+
_wrap_notification_show(VALUE self)
|
334
|
+
{
|
335
|
+
NotifyNotification *n = NOTIFY_NOTIFICATION(RVAL2GOBJ(self));
|
336
|
+
|
337
|
+
#ifdef DEBUG
|
338
|
+
if(NOTIFY_IS_NOTIFICATION(n))
|
339
|
+
rb_warn("show, ok");
|
340
|
+
else
|
341
|
+
rb_warn("show, no ok");
|
342
|
+
#endif
|
343
|
+
|
344
|
+
if(notify_notification_show(n, NULL) == TRUE)
|
345
|
+
return Qtrue;
|
346
|
+
|
347
|
+
return Qfalse;
|
348
|
+
}
|
349
|
+
|
350
|
+
/*
|
351
|
+
* call-seq:
|
352
|
+
* timeout=(milliseconds)
|
353
|
+
*
|
354
|
+
* Sets the timeout in milliseconds.
|
355
|
+
*/
|
356
|
+
static VALUE
|
357
|
+
_wrap_notification_set_timeout(VALUE self, VALUE ml)
|
358
|
+
{
|
359
|
+
NotifyNotification *n = NOTIFY_NOTIFICATION(RVAL2GOBJ(self));
|
360
|
+
|
361
|
+
#ifdef DEBUG
|
362
|
+
if(NOTIFY_IS_NOTIFICATION(n))
|
363
|
+
rb_warn("timeout, ok");
|
364
|
+
else
|
365
|
+
rb_warn("timeout, no ok");
|
366
|
+
#endif
|
367
|
+
|
368
|
+
notify_notification_set_timeout(n, FIX2INT(ml));
|
369
|
+
|
370
|
+
return Qnil;
|
371
|
+
}
|
372
|
+
|
373
|
+
/*
|
374
|
+
* call-seq:
|
375
|
+
* category=(category_name)
|
376
|
+
*
|
377
|
+
* category_name = The category name
|
378
|
+
*
|
379
|
+
* Sets the category
|
380
|
+
*/
|
381
|
+
static VALUE
|
382
|
+
_wrap_notification_set_category(VALUE self, VALUE cat_name)
|
383
|
+
{
|
384
|
+
char *cname = NIL_P(cat_name) ? NULL : StringValuePtr(cat_name);
|
385
|
+
NotifyNotification *n = NOTIFY_NOTIFICATION(RVAL2GOBJ(self));
|
386
|
+
|
387
|
+
#ifdef DEBUG
|
388
|
+
if(NOTIFY_IS_NOTIFICATION(n))
|
389
|
+
rb_warn("set_category, ok");
|
390
|
+
else
|
391
|
+
rb_warn("set_category, not ok");
|
392
|
+
#endif
|
393
|
+
|
394
|
+
notify_notification_set_category(n, cname);
|
395
|
+
|
396
|
+
return Qnil;
|
397
|
+
}
|
398
|
+
|
399
|
+
/*
|
400
|
+
* call-seq:
|
401
|
+
* urgency=(urgency_level)
|
402
|
+
*
|
403
|
+
* urgency_level = The urgency level
|
404
|
+
*
|
405
|
+
* Sets the urgency level
|
406
|
+
*/
|
407
|
+
static VALUE
|
408
|
+
_wrap_notification_set_urgency(VALUE self, VALUE urgency)
|
409
|
+
{
|
410
|
+
NotifyNotification *n = NOTIFY_NOTIFICATION(RVAL2GOBJ(self));
|
411
|
+
|
412
|
+
#ifdef DEBUG
|
413
|
+
if(NOTIFY_IS_NOTIFICATION(n))
|
414
|
+
rb_warn("set_urgency, ok");
|
415
|
+
else
|
416
|
+
rb_warn("set_urgency, no ok");
|
417
|
+
#endif
|
418
|
+
|
419
|
+
switch(FIX2INT(urgency))
|
420
|
+
{
|
421
|
+
case NOTIFY_URGENCY_LOW:
|
422
|
+
notify_notification_set_urgency(n, NOTIFY_URGENCY_LOW);
|
423
|
+
break;
|
424
|
+
case NOTIFY_URGENCY_NORMAL:
|
425
|
+
notify_notification_set_urgency(n, NOTIFY_URGENCY_NORMAL);
|
426
|
+
break;
|
427
|
+
case NOTIFY_URGENCY_CRITICAL:
|
428
|
+
notify_notification_set_urgency(n, NOTIFY_URGENCY_CRITICAL);
|
429
|
+
break;
|
430
|
+
default:
|
431
|
+
notify_notification_set_urgency(n, NOTIFY_URGENCY_NORMAL);
|
432
|
+
}
|
433
|
+
|
434
|
+
return Qnil;
|
435
|
+
}
|
436
|
+
|
437
|
+
/*
|
438
|
+
* call-seq:
|
439
|
+
* pixbuf_icon=(icon)
|
440
|
+
*
|
441
|
+
* icon = The icon
|
442
|
+
*
|
443
|
+
* Sets the icon from a Gdk::Pixbuf
|
444
|
+
*/
|
445
|
+
static VALUE
|
446
|
+
_wrap_notification_set_pixbuf_icon(VALUE self, VALUE icon)
|
447
|
+
{
|
448
|
+
GdkPixbuf *pix = GDK_PIXBUF(RVAL2GOBJ(icon));
|
449
|
+
NotifyNotification *n = NOTIFY_NOTIFICATION(RVAL2GOBJ(self));
|
450
|
+
|
451
|
+
#ifdef DEBUG
|
452
|
+
if(NOTIFY_IS_NOTIFICATION(n) && GDK_IS_PIXBUF(pix))
|
453
|
+
rb_warn("pixbuf_icon, ok");
|
454
|
+
else
|
455
|
+
rb_warn("pixbuf_icon, no ok");
|
456
|
+
#endif
|
457
|
+
|
458
|
+
notify_notification_set_icon_from_pixbuf(n, pix);
|
459
|
+
|
460
|
+
return Qnil;
|
461
|
+
}
|
462
|
+
|
463
|
+
/*
|
464
|
+
* call-seq:
|
465
|
+
* hint32(key, value)
|
466
|
+
*
|
467
|
+
* key = The hint
|
468
|
+
*
|
469
|
+
* value = The hint's value
|
470
|
+
*
|
471
|
+
* Sets a hint with a 32-bit integer value
|
472
|
+
*/
|
473
|
+
static VALUE
|
474
|
+
_wrap_notification_set_hint32(VALUE self, VALUE key, VALUE value)
|
475
|
+
{
|
476
|
+
char *vkey = NIL_P(key) ? NULL : StringValuePtr(key);
|
477
|
+
NotifyNotification *n = NOTIFY_NOTIFICATION(RVAL2GOBJ(self));
|
478
|
+
|
479
|
+
#ifdef DEBUG
|
480
|
+
if(NOTIFY_IS_NOTIFICATION(n))
|
481
|
+
rb_warn("set_hint32, ok");
|
482
|
+
else
|
483
|
+
rb_warn("set_hint32, no ok");
|
484
|
+
#endif
|
485
|
+
|
486
|
+
notify_notification_set_hint_int32(n, vkey, FIX2INT(value));
|
487
|
+
|
488
|
+
return Qnil;
|
489
|
+
}
|
490
|
+
|
491
|
+
/*
|
492
|
+
* call-seq:
|
493
|
+
* hint_double(key, value)
|
494
|
+
*
|
495
|
+
* key = The hint
|
496
|
+
*
|
497
|
+
* value = The hint's value
|
498
|
+
*
|
499
|
+
* Sets a hint with a double value
|
500
|
+
*/
|
501
|
+
static VALUE
|
502
|
+
_wrap_notification_set_hint_double(VALUE self, VALUE key, VALUE value)
|
503
|
+
{
|
504
|
+
char *vkey = NIL_P(key) ? NULL : StringValuePtr(key);
|
505
|
+
NotifyNotification *n = NOTIFY_NOTIFICATION(RVAL2GOBJ(self));
|
506
|
+
|
507
|
+
#ifdef DEBUG
|
508
|
+
if(NOTIFY_IS_NOTIFICATION(n))
|
509
|
+
rb_warn("set_hint_double, ok");
|
510
|
+
else
|
511
|
+
rb_warn("set_hint_double, no ok");
|
512
|
+
#endif
|
513
|
+
|
514
|
+
notify_notification_set_hint_double(n, vkey, NUM2DBL(value));
|
515
|
+
|
516
|
+
return Qnil;
|
517
|
+
}
|
518
|
+
|
519
|
+
/*
|
520
|
+
* call-seq:
|
521
|
+
* hint_string(key, value)
|
522
|
+
*
|
523
|
+
* key = The hint
|
524
|
+
*
|
525
|
+
* value = The hint's value
|
526
|
+
*
|
527
|
+
* Sets a hint with a string value
|
528
|
+
*/
|
529
|
+
static VALUE
|
530
|
+
_wrap_notification_set_hint_string(VALUE self, VALUE key, VALUE value)
|
531
|
+
{
|
532
|
+
char *vkey = NIL_P(key) ? NULL : StringValuePtr(key);
|
533
|
+
char *vvalue = NIL_P(value) ? NULL : StringValuePtr(value);
|
534
|
+
NotifyNotification *n = NOTIFY_NOTIFICATION(RVAL2GOBJ(self));
|
535
|
+
|
536
|
+
#ifdef DEBUG
|
537
|
+
if(NOTIFY_IS_NOTIFICATION(n))
|
538
|
+
rb_warn("set_hint_string, ok");
|
539
|
+
else
|
540
|
+
rb_warn("set_hint_string, no ok");
|
541
|
+
#endif
|
542
|
+
|
543
|
+
notify_notification_set_hint_string(n, vkey, vvalue);
|
544
|
+
|
545
|
+
return Qnil;
|
546
|
+
}
|
547
|
+
|
548
|
+
/*
|
549
|
+
* call-seq:
|
550
|
+
* hint_byte(key, value)
|
551
|
+
*
|
552
|
+
* key = The hint
|
553
|
+
*
|
554
|
+
* value = The hint's value
|
555
|
+
*
|
556
|
+
* Sets a hint with a byte value
|
557
|
+
*/
|
558
|
+
static VALUE
|
559
|
+
_wrap_notification_set_hint_byte(VALUE self, VALUE key, VALUE value)
|
560
|
+
{
|
561
|
+
char *vkey = NIL_P(key) ? NULL : StringValuePtr(key);
|
562
|
+
NotifyNotification *n = NOTIFY_NOTIFICATION(RVAL2GOBJ(self));
|
563
|
+
|
564
|
+
#ifdef DEBUG
|
565
|
+
if(NOTIFY_IS_NOTIFICATION(n))
|
566
|
+
rb_warn("set_hint_byte, ok");
|
567
|
+
else
|
568
|
+
rb_warn("set_hint_byte, no ok");
|
569
|
+
#endif
|
570
|
+
|
571
|
+
notify_notification_set_hint_byte(n, vkey, FIX2INT(value));
|
572
|
+
|
573
|
+
return Qnil;
|
574
|
+
}
|
575
|
+
|
576
|
+
/*
|
577
|
+
* call-seq:
|
578
|
+
* clear_hints
|
579
|
+
*
|
580
|
+
* Clears all hints from the notification. Remember to use this method before call the Notification#close method.
|
581
|
+
*/
|
582
|
+
static VALUE
|
583
|
+
_wrap_notification_clear_hints(VALUE self)
|
584
|
+
{
|
585
|
+
NotifyNotification *n = NOTIFY_NOTIFICATION(RVAL2GOBJ(self));
|
586
|
+
|
587
|
+
#ifdef DEBUG
|
588
|
+
if(NOTIFY_IS_NOTIFICATION(n))
|
589
|
+
rb_warn("clear_hints, ok");
|
590
|
+
else
|
591
|
+
rb_warn("clear_hints, no ok");
|
592
|
+
#endif
|
593
|
+
|
594
|
+
notify_notification_clear_hints(n);
|
595
|
+
|
596
|
+
return Qnil;
|
597
|
+
}
|
598
|
+
|
599
|
+
#ifdef HAVE_GEOMETRY_HINTS
|
600
|
+
/*
|
601
|
+
* call-seq:
|
602
|
+
* geometry_hints(screen, x, y)
|
603
|
+
*
|
604
|
+
* ** WHEN COMPILED AGAINST LIBNOTIFY 0.4.1 OR HIGHER **
|
605
|
+
*
|
606
|
+
* screen = The Gdk::Screen the notification should appear on
|
607
|
+
*
|
608
|
+
* x = The X coordinate to point to
|
609
|
+
*
|
610
|
+
* y = The Y coordinate to point to
|
611
|
+
*
|
612
|
+
* Sets the geometry hints on the notification
|
613
|
+
*/
|
614
|
+
static VALUE
|
615
|
+
_wrap_notification_set_geometry_hints(VALUE self, VALUE screen, VALUE x, VALUE y)
|
616
|
+
{
|
617
|
+
GdkScreen *sc = GDK_SCREEN(RVAL2GOBJ(screen));
|
618
|
+
NotifyNotification *n = NOTIFY_NOTIFICATION(RVAL2GOBJ(self));
|
619
|
+
|
620
|
+
if(sc == NULL)
|
621
|
+
rb_raise(rb_eArgError, "REQUIRED: the `screen` field");
|
622
|
+
|
623
|
+
#ifdef DEBUG
|
624
|
+
if(NOTIFY_IS_NOTIFICATION(n) && GDK_IS_SCREEN(sc))
|
625
|
+
rb_warn("set_geometry_hints, ok");
|
626
|
+
else
|
627
|
+
rb_warn("set_geometry_hints, no ok");
|
628
|
+
#endif
|
629
|
+
|
630
|
+
notify_notification_set_geometry_hints(n, sc, FIX2INT(x), FIX2INT(y));
|
631
|
+
|
632
|
+
return Qnil;
|
633
|
+
}
|
634
|
+
#endif
|
635
|
+
|
636
|
+
/*
|
637
|
+
* call-seq:
|
638
|
+
* add_action(action, label, user_data) { |action, user_data| ... }
|
639
|
+
*
|
640
|
+
* action = The action id
|
641
|
+
*
|
642
|
+
* label = The action label
|
643
|
+
*
|
644
|
+
* user_data = Custom data to pass into the block (optional)
|
645
|
+
*
|
646
|
+
* Adds an action. When the action is invoked, the specified block will be called
|
647
|
+
*
|
648
|
+
* Examples:
|
649
|
+
*
|
650
|
+
* myinstance.add_action( "MyAction", "MyLabel" ) do |action|
|
651
|
+
* # something to do
|
652
|
+
* end
|
653
|
+
*
|
654
|
+
* Or
|
655
|
+
*
|
656
|
+
* myinstance.add_action( "MyAction", "MyLabel", MyData ) do |action, mydata|
|
657
|
+
* # something to do
|
658
|
+
* end
|
659
|
+
*/
|
660
|
+
static VALUE
|
661
|
+
_wrap_notification_add_action(int argc, VALUE *argv, VALUE self)
|
662
|
+
{
|
663
|
+
NotifyNotification *n = NOTIFY_NOTIFICATION(RVAL2GOBJ(self));
|
664
|
+
VALUE action, label, data, body;
|
665
|
+
ActionData *actionData = NULL;
|
666
|
+
|
667
|
+
#ifdef DEBUG
|
668
|
+
if(NOTIFY_IS_NOTIFICATION(n))
|
669
|
+
rb_warn("add_action, ok");
|
670
|
+
else
|
671
|
+
rb_warn("add_action, no ok");
|
672
|
+
#endif
|
673
|
+
|
674
|
+
if(!rb_block_given_p())
|
675
|
+
rb_raise(rb_eRuntimeError, "This method requires a block");
|
676
|
+
|
677
|
+
rb_scan_args(argc, argv, "21&", &action, &label, &data, &body);
|
678
|
+
|
679
|
+
actionData = g_new0(ActionData, 1);
|
680
|
+
actionData->callback = body;
|
681
|
+
actionData->action = action;
|
682
|
+
actionData->user_data = data;
|
683
|
+
|
684
|
+
notify_notification_add_action(n,
|
685
|
+
NIL_P(action) ? NULL : StringValuePtr(action),
|
686
|
+
NIL_P(label) ? NULL : StringValuePtr(label),
|
687
|
+
(NotifyActionCallback) _notification_action_cb,
|
688
|
+
actionData, (GFreeFunc)_notification_action_free);
|
689
|
+
|
690
|
+
return Qnil;
|
691
|
+
}
|
692
|
+
|
693
|
+
/*
|
694
|
+
* call-seq:
|
695
|
+
* clear_actions
|
696
|
+
*
|
697
|
+
* Clears all actions from the notification. Remember to use this method before call the Notification#close method.
|
698
|
+
*/
|
699
|
+
static VALUE
|
700
|
+
_wrap_notification_clear_actions(VALUE self)
|
701
|
+
{
|
702
|
+
NotifyNotification *n = NOTIFY_NOTIFICATION(RVAL2GOBJ(self));
|
703
|
+
|
704
|
+
#ifdef DEBUG
|
705
|
+
if(NOTIFY_IS_NOTIFICATION(n))
|
706
|
+
rb_warn("clear_actions, ok");
|
707
|
+
else
|
708
|
+
rb_warn("clear_actions, no ok");
|
709
|
+
#endif
|
710
|
+
|
711
|
+
notify_notification_clear_actions(n);
|
712
|
+
|
713
|
+
return Qnil;
|
714
|
+
}
|
715
|
+
|
716
|
+
/*
|
717
|
+
* call-seq:
|
718
|
+
* close
|
719
|
+
*
|
720
|
+
* Tells the notification server to hide the notification on the screen.
|
721
|
+
*/
|
722
|
+
static VALUE
|
723
|
+
_wrap_notification_close(VALUE self)
|
724
|
+
{
|
725
|
+
NotifyNotification *n = NOTIFY_NOTIFICATION(RVAL2GOBJ(self));
|
726
|
+
|
727
|
+
#ifdef DEBUG
|
728
|
+
if(NOTIFY_IS_NOTIFICATION(n))
|
729
|
+
rb_warn("close, ok");
|
730
|
+
else
|
731
|
+
rb_warn("close, no ok");
|
732
|
+
#endif
|
733
|
+
|
734
|
+
if(notify_notification_close(n, NULL))
|
735
|
+
return Qtrue;
|
736
|
+
|
737
|
+
return Qfalse;
|
738
|
+
}
|
739
|
+
|
740
|
+
#ifdef HAVE_CLOSED_REASON
|
741
|
+
/*
|
742
|
+
* call-seq:
|
743
|
+
* closed_reason
|
744
|
+
*
|
745
|
+
* ** WHEN COMPILED AGAINST LIBNOTIFY 0.4.5 OR HIGHER **
|
746
|
+
*
|
747
|
+
* Returns the reason code why the notification was closed
|
748
|
+
*/
|
749
|
+
static VALUE
|
750
|
+
_wrap_notification_get_closed_reason(VALUE self)
|
751
|
+
{
|
752
|
+
NotifyNotification *n = NOTIFY_NOTIFICATION(RVAL2GOBJ(self));
|
753
|
+
int reason = -1;
|
754
|
+
|
755
|
+
#ifdef DEBUG
|
756
|
+
if(NOTIFY_IS_NOTIFICATION(n))
|
757
|
+
rb_warn("closed_reason, ok");
|
758
|
+
else
|
759
|
+
rb_warn("closed_reason, no ok");
|
760
|
+
#endif
|
761
|
+
|
762
|
+
reason = notify_notification_get_closed_reason(n);
|
763
|
+
|
764
|
+
return INT2FIX(reason);
|
765
|
+
}
|
766
|
+
#endif
|
767
|
+
|
768
|
+
/*
|
769
|
+
* libnotify ruby interface
|
770
|
+
* [ http://www.galago-project.org ]
|
771
|
+
*/
|
772
|
+
void
|
773
|
+
Init_rnotify()
|
774
|
+
{
|
775
|
+
VALUE mNotify = rb_define_module(MODULE_NAME);
|
776
|
+
VALUE cNotification = G_DEF_CLASS2(NOTIFY_TYPE_NOTIFICATION, CLASS_NAME, mNotify,
|
777
|
+
0, _wrap_alloc_free);
|
778
|
+
|
779
|
+
rb_define_const(cNotification, "URGENCY_LOW", INT2FIX(NOTIFY_URGENCY_LOW));
|
780
|
+
rb_define_const(cNotification, "URGENCY_NORMAL", INT2FIX(NOTIFY_URGENCY_NORMAL));
|
781
|
+
rb_define_const(cNotification, "URGENCY_CRITICAL", INT2FIX(NOTIFY_URGENCY_CRITICAL));
|
782
|
+
rb_define_const(cNotification, "EXPIRES_DEFAULT", INT2FIX(NOTIFY_EXPIRES_DEFAULT));
|
783
|
+
rb_define_const(cNotification, "EXPIRES_NEVER", INT2FIX(NOTIFY_EXPIRES_NEVER));
|
784
|
+
|
785
|
+
rb_define_module_function(mNotify, "init", _wrap_notify_init, 1);
|
786
|
+
rb_define_module_function(mNotify, "uninit", _wrap_notify_uninit, 0);
|
787
|
+
rb_define_module_function(mNotify, "init?", _wrap_notify_is_initted, 0);
|
788
|
+
rb_define_module_function(mNotify, "app_name", _wrap_notify_get_app_name, 0);
|
789
|
+
rb_define_module_function(mNotify, "server_caps", _wrap_notify_get_server_caps, 0);
|
790
|
+
rb_define_module_function(mNotify, "server_info", _wrap_notify_get_server_info, 0);
|
791
|
+
|
792
|
+
rb_define_method(cNotification, "initialize", _wrap_notification_init, 4);
|
793
|
+
rb_define_method(cNotification, "update", _wrap_notification_update, 3);
|
794
|
+
rb_define_method(cNotification, "attach_to", _wrap_notification_attach_to, 1);
|
795
|
+
rb_define_method(cNotification, "show", _wrap_notification_show, 0);
|
796
|
+
rb_define_method(cNotification, "timeout=", _wrap_notification_set_timeout, 1);
|
797
|
+
rb_define_method(cNotification, "category=", _wrap_notification_set_category, 1);
|
798
|
+
rb_define_method(cNotification, "urgency=", _wrap_notification_set_urgency, 1);
|
799
|
+
rb_define_method(cNotification, "pixbuf_icon=", _wrap_notification_set_pixbuf_icon, 1);
|
800
|
+
rb_define_method(cNotification, "hint32", _wrap_notification_set_hint32, 2);
|
801
|
+
rb_define_method(cNotification, "hint_double", _wrap_notification_set_hint_double, 2);
|
802
|
+
rb_define_method(cNotification, "hint_string", _wrap_notification_set_hint_string, 2);
|
803
|
+
rb_define_method(cNotification, "hint_byte", _wrap_notification_set_hint_byte, 2);
|
804
|
+
#ifdef HAVE_GEOMETRY_HINTS
|
805
|
+
rb_define_method(cNotification, "geometry_hints", _wrap_notification_set_geometry_hints, 3);
|
806
|
+
#endif
|
807
|
+
rb_define_method(cNotification, "add_action", _wrap_notification_add_action, -1);
|
808
|
+
rb_define_method(cNotification, "clear_actions", _wrap_notification_clear_actions, 0);
|
809
|
+
rb_define_method(cNotification, "clear_hints", _wrap_notification_clear_hints, 0);
|
810
|
+
#ifdef HAVE_CLOSED_REASON
|
811
|
+
rb_define_method(cNotification, "closed_reason", _wrap_notification_get_closed_reason, 0);
|
812
|
+
#endif
|
813
|
+
rb_define_method(cNotification, "close", _wrap_notification_close, 0);
|
814
|
+
}
|