xsettings-ruby 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +15 -0
- data/Rakefile +54 -0
- data/ext/xsettings/extconf.rb +114 -0
- data/ext/xsettings/xsettings-common.c +261 -0
- data/ext/xsettings/xsettings-common.h +110 -0
- data/ext/xsettings/xsettings-manager.c +419 -0
- data/ext/xsettings/xsettings-manager.h +68 -0
- data/ext/xsettings/xsettings.c +170 -0
- data/ext/xsettings/xsettings.cr +81 -0
- data/ext/xsettings/xsettings.rd +16 -0
- data/lib/xsettings.rb +4 -0
- data/lib/xsettings/version.rb +3 -0
- metadata +75 -0
@@ -0,0 +1,68 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright © 2001 Red Hat, Inc.
|
3
|
+
*
|
4
|
+
* Permission to use, copy, modify, distribute, and sell this software and its
|
5
|
+
* documentation for any purpose is hereby granted without fee, provided that
|
6
|
+
* the above copyright notice appear in all copies and that both that
|
7
|
+
* copyright notice and this permission notice appear in supporting
|
8
|
+
* documentation, and that the name of Red Hat not be used in advertising or
|
9
|
+
* publicity pertaining to distribution of the software without specific,
|
10
|
+
* written prior permission. Red Hat makes no representations about the
|
11
|
+
* suitability of this software for any purpose. It is provided "as is"
|
12
|
+
* without express or implied warranty.
|
13
|
+
*
|
14
|
+
* RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
|
15
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL RED HAT
|
16
|
+
* BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
17
|
+
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
18
|
+
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
19
|
+
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
20
|
+
*
|
21
|
+
* Author: Owen Taylor, Red Hat, Inc.
|
22
|
+
*/
|
23
|
+
#ifndef XSETTINGS_MANAGER_H
|
24
|
+
#define XSETTINGS_MANAGER_H
|
25
|
+
|
26
|
+
#include <X11/Xlib.h>
|
27
|
+
#include "xsettings-common.h"
|
28
|
+
|
29
|
+
#ifdef __cplusplus
|
30
|
+
extern "C" {
|
31
|
+
#endif /* __cplusplus */
|
32
|
+
|
33
|
+
typedef struct _XSettingsManager XSettingsManager;
|
34
|
+
|
35
|
+
typedef void (*XSettingsTerminateFunc) (void *cb_data);
|
36
|
+
|
37
|
+
Bool xsettings_manager_check_running (Display *display,
|
38
|
+
int screen);
|
39
|
+
|
40
|
+
XSettingsManager *xsettings_manager_new (Display *display,
|
41
|
+
int screen,
|
42
|
+
XSettingsTerminateFunc terminate,
|
43
|
+
void *cb_data);
|
44
|
+
|
45
|
+
void xsettings_manager_destroy (XSettingsManager *manager);
|
46
|
+
Window xsettings_manager_get_window (XSettingsManager *manager);
|
47
|
+
Bool xsettings_manager_process_event (XSettingsManager *manager,
|
48
|
+
XEvent *xev);
|
49
|
+
|
50
|
+
XSettingsResult xsettings_manager_set_setting (XSettingsManager *manager,
|
51
|
+
XSettingsSetting *setting);
|
52
|
+
XSettingsResult xsettings_manager_set_int (XSettingsManager *manager,
|
53
|
+
const char *name,
|
54
|
+
int value);
|
55
|
+
XSettingsResult xsettings_manager_set_string (XSettingsManager *manager,
|
56
|
+
const char *name,
|
57
|
+
const char *value);
|
58
|
+
XSettingsResult xsettings_manager_set_color (XSettingsManager *manager,
|
59
|
+
const char *name,
|
60
|
+
XSettingsColor *value);
|
61
|
+
XSettingsResult xsettings_manager_notify (XSettingsManager *manager);
|
62
|
+
|
63
|
+
|
64
|
+
#ifdef __cplusplus
|
65
|
+
}
|
66
|
+
#endif /* __cplusplus */
|
67
|
+
|
68
|
+
#endif /* XSETTINGS_MANAGER_H */
|
@@ -0,0 +1,170 @@
|
|
1
|
+
#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
|
2
|
+
/* Includes */
|
3
|
+
#include <ruby.h>
|
4
|
+
#include <stdlib.h>
|
5
|
+
#include <stdio.h>
|
6
|
+
#include <string.h>
|
7
|
+
#include "gtk/gtk.h"
|
8
|
+
#include "gdk/gdk.h"
|
9
|
+
#include "gdk/gdkx.h"
|
10
|
+
|
11
|
+
/* Setup types */
|
12
|
+
/* Try not to clash with other definitions of bool... */
|
13
|
+
typedef int rubber_bool;
|
14
|
+
#define bool rubber_bool
|
15
|
+
|
16
|
+
/* Prototypes */
|
17
|
+
#include "rbglib.h"
|
18
|
+
|
19
|
+
#include "rbgtk.h"
|
20
|
+
|
21
|
+
#if defined(G_PLATFORM_WIN32) && !defined(RUBY_GTK2_STATIC_COMPILATION)
|
22
|
+
# ifdef RUBY_GTK2_COMPILATION
|
23
|
+
# define RUBY_GTK2_VAR __declspec(dllexport)
|
24
|
+
# else
|
25
|
+
# define RUBY_GTK2_VAR extern __declspec(dllimport)
|
26
|
+
# endif
|
27
|
+
#else
|
28
|
+
# define RUBY_GTK2_VAR extern
|
29
|
+
#endif
|
30
|
+
|
31
|
+
RUBY_GTK2_VAR VALUE mGtk;
|
32
|
+
RUBY_GTK2_VAR VALUE mGdk;
|
33
|
+
|
34
|
+
#define RBGTK_INITIALIZE(obj,gtkobj) (rbgtk_initialize_gtkobject(obj, GTK_OBJECT(gtkobj)))
|
35
|
+
static VALUE mXSettings;
|
36
|
+
static VALUE cManager;
|
37
|
+
static VALUE
|
38
|
+
Manager_CLASS_exists_query(VALUE self);
|
39
|
+
static VALUE
|
40
|
+
Manager_CLASS___alloc__(VALUE self);
|
41
|
+
static VALUE
|
42
|
+
Manager_terminated(VALUE self);
|
43
|
+
static VALUE
|
44
|
+
Manager_destroy(VALUE self);
|
45
|
+
static VALUE
|
46
|
+
Manager_notify(VALUE self);
|
47
|
+
static VALUE
|
48
|
+
Manager__brace_brace_equals(VALUE self, VALUE __v_name, VALUE value);
|
49
|
+
|
50
|
+
/* Inline C code */
|
51
|
+
|
52
|
+
#include "xsettings-manager.h"
|
53
|
+
|
54
|
+
static XSettingsManager *
|
55
|
+
manager_unwrap(VALUE obj)
|
56
|
+
{
|
57
|
+
XSettingsManager *manager;
|
58
|
+
Data_Get_Struct(obj, XSettingsManager, manager);
|
59
|
+
return manager;
|
60
|
+
}
|
61
|
+
|
62
|
+
static void terminate_xsettings(void *value)
|
63
|
+
{
|
64
|
+
if (value)
|
65
|
+
{
|
66
|
+
VALUE obj = (VALUE)value;
|
67
|
+
rb_funcall(obj, rb_intern("terminated"),0);
|
68
|
+
}
|
69
|
+
}
|
70
|
+
|
71
|
+
|
72
|
+
/* Code */
|
73
|
+
static VALUE
|
74
|
+
Manager_CLASS_exists_query(VALUE self)
|
75
|
+
{
|
76
|
+
VALUE __p_retval = Qnil;
|
77
|
+
|
78
|
+
#line 33 "/home/geoff/Projects/xsettings/ext/xsettings/xsettings.cr"
|
79
|
+
do { __p_retval = ((xsettings_manager_check_running(GDK_DISPLAY(), DefaultScreen(GDK_DISPLAY()))) ? Qtrue : Qfalse); goto out; } while(0);
|
80
|
+
out:
|
81
|
+
return __p_retval;
|
82
|
+
}
|
83
|
+
|
84
|
+
static VALUE
|
85
|
+
Manager_CLASS___alloc__(VALUE self)
|
86
|
+
{
|
87
|
+
VALUE __p_retval = Qnil;
|
88
|
+
|
89
|
+
#line 37 "/home/geoff/Projects/xsettings/ext/xsettings/xsettings.cr"
|
90
|
+
do { __p_retval = Data_Wrap_Struct(self, NULL, xsettings_manager_destroy, xsettings_manager_new(GDK_DISPLAY(), DefaultScreen(GDK_DISPLAY()), terminate_xsettings, (void*)self)); goto out; } while(0);
|
91
|
+
out:
|
92
|
+
return __p_retval;
|
93
|
+
}
|
94
|
+
|
95
|
+
static VALUE
|
96
|
+
Manager_terminated(VALUE self)
|
97
|
+
{
|
98
|
+
XSettingsManager *_self = manager_unwrap(self);
|
99
|
+
|
100
|
+
#line 44 "/home/geoff/Projects/xsettings/ext/xsettings/xsettings.cr"
|
101
|
+
_self = _self;
|
102
|
+
|
103
|
+
return Qnil;
|
104
|
+
}
|
105
|
+
|
106
|
+
static VALUE
|
107
|
+
Manager_destroy(VALUE self)
|
108
|
+
{
|
109
|
+
XSettingsManager *_self = manager_unwrap(self);
|
110
|
+
|
111
|
+
#line 47 "/home/geoff/Projects/xsettings/ext/xsettings/xsettings.cr"
|
112
|
+
xsettings_manager_destroy(_self);
|
113
|
+
|
114
|
+
return Qnil;
|
115
|
+
}
|
116
|
+
|
117
|
+
static VALUE
|
118
|
+
Manager_notify(VALUE self)
|
119
|
+
{
|
120
|
+
XSettingsManager *_self = manager_unwrap(self);
|
121
|
+
|
122
|
+
#line 50 "/home/geoff/Projects/xsettings/ext/xsettings/xsettings.cr"
|
123
|
+
xsettings_manager_notify(_self);
|
124
|
+
|
125
|
+
return Qnil;
|
126
|
+
}
|
127
|
+
|
128
|
+
static VALUE
|
129
|
+
Manager__brace_brace_equals(VALUE self, VALUE __v_name, VALUE value)
|
130
|
+
{
|
131
|
+
char * name; char * __orig_name;
|
132
|
+
XSettingsManager *_self = manager_unwrap(self);
|
133
|
+
__orig_name = name = ( NIL_P(__v_name) ? NULL : StringValuePtr(__v_name) );
|
134
|
+
|
135
|
+
#line 53 "/home/geoff/Projects/xsettings/ext/xsettings/xsettings.cr"
|
136
|
+
|
137
|
+
do {
|
138
|
+
switch(TYPE(value)) { case T_NIL: case T_TRUE: case T_FALSE: xsettings_manager_set_int(_self, name, RTEST(value));
|
139
|
+
break;
|
140
|
+
case T_FIXNUM: xsettings_manager_set_int(_self, name, NUM2INT(value));
|
141
|
+
break;
|
142
|
+
case T_STRING: xsettings_manager_set_string(_self, name, StringValuePtr(value));
|
143
|
+
break;
|
144
|
+
case T_ARRAY: if (RARRAY_LEN(value) == 4) { XSettingsColor col ;
|
145
|
+
col.red = NUM2INT(RARRAY_PTR(value)[0]);
|
146
|
+
col.green = NUM2INT(RARRAY_PTR(value)[1]);
|
147
|
+
col.blue = NUM2INT(RARRAY_PTR(value)[2]);
|
148
|
+
col.alpha = NUM2INT(RARRAY_PTR(value)[3]);
|
149
|
+
xsettings_manager_set_color(_self, name, &col);
|
150
|
+
} break;
|
151
|
+
}
|
152
|
+
|
153
|
+
} while(0);
|
154
|
+
|
155
|
+
return Qnil;
|
156
|
+
}
|
157
|
+
|
158
|
+
/* Init */
|
159
|
+
void
|
160
|
+
Init_xsettings(void)
|
161
|
+
{
|
162
|
+
mXSettings = rb_define_module("XSettings");
|
163
|
+
cManager = rb_define_class_under(mXSettings, "Manager", rb_cObject);
|
164
|
+
rb_define_singleton_method(cManager, "exists?", Manager_CLASS_exists_query, 0);
|
165
|
+
rb_define_alloc_func(cManager, Manager_CLASS___alloc__);
|
166
|
+
rb_define_method(cManager, "terminated", Manager_terminated, 0);
|
167
|
+
rb_define_method(cManager, "destroy", Manager_destroy, 0);
|
168
|
+
rb_define_method(cManager, "notify", Manager_notify, 0);
|
169
|
+
rb_define_method(cManager, "[]=", Manager__brace_brace_equals, 2);
|
170
|
+
}
|
@@ -0,0 +1,81 @@
|
|
1
|
+
%pkg-config gtk+-2.0
|
2
|
+
%include gtk/gtk.h
|
3
|
+
%include gdk/gdk.h
|
4
|
+
%include gdk/gdkx.h
|
5
|
+
|
6
|
+
%{
|
7
|
+
#include "xsettings-manager.h"
|
8
|
+
|
9
|
+
static XSettingsManager *
|
10
|
+
manager_unwrap(VALUE obj)
|
11
|
+
{
|
12
|
+
XSettingsManager *manager;
|
13
|
+
Data_Get_Struct(obj, XSettingsManager, manager);
|
14
|
+
return manager;
|
15
|
+
}
|
16
|
+
|
17
|
+
static void terminate_xsettings(void *value)
|
18
|
+
{
|
19
|
+
if (value)
|
20
|
+
{
|
21
|
+
VALUE obj = (VALUE)value;
|
22
|
+
rb_funcall(obj, rb_intern("terminated"),0);
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
%}
|
27
|
+
|
28
|
+
%map VALUE > XSettingsManager* : manager_unwrap(%%)
|
29
|
+
|
30
|
+
module XSettings
|
31
|
+
class Manager
|
32
|
+
pre_func XSettingsManager *_self = manager_unwrap(self);
|
33
|
+
def bool:self.exists?
|
34
|
+
return xsettings_manager_check_running(GDK_DISPLAY(),
|
35
|
+
DefaultScreen(GDK_DISPLAY()));
|
36
|
+
end
|
37
|
+
def self.__alloc__()
|
38
|
+
return Data_Wrap_Struct(self, NULL,
|
39
|
+
xsettings_manager_destroy,
|
40
|
+
xsettings_manager_new(GDK_DISPLAY(),
|
41
|
+
DefaultScreen(GDK_DISPLAY()),
|
42
|
+
terminate_xsettings, (void*)self));
|
43
|
+
end
|
44
|
+
def terminated()
|
45
|
+
_self = _self;
|
46
|
+
end
|
47
|
+
def destroy()
|
48
|
+
xsettings_manager_destroy(_self);
|
49
|
+
end
|
50
|
+
def notify
|
51
|
+
xsettings_manager_notify(_self);
|
52
|
+
end
|
53
|
+
def []=(char *name, value)
|
54
|
+
switch(TYPE(value))
|
55
|
+
{
|
56
|
+
case T_NIL:
|
57
|
+
case T_TRUE:
|
58
|
+
case T_FALSE:
|
59
|
+
xsettings_manager_set_int(_self, name, RTEST(value));
|
60
|
+
break;
|
61
|
+
case T_FIXNUM:
|
62
|
+
xsettings_manager_set_int(_self, name, NUM2INT(value));
|
63
|
+
break;
|
64
|
+
case T_STRING:
|
65
|
+
xsettings_manager_set_string(_self, name, StringValuePtr(value));
|
66
|
+
break;
|
67
|
+
case T_ARRAY:
|
68
|
+
if (RARRAY_LEN(value) == 4) {
|
69
|
+
XSettingsColor col;
|
70
|
+
col.red = NUM2INT(RARRAY_PTR(value)[0]);
|
71
|
+
col.green = NUM2INT(RARRAY_PTR(value)[1]);
|
72
|
+
col.blue = NUM2INT(RARRAY_PTR(value)[2]);
|
73
|
+
col.alpha = NUM2INT(RARRAY_PTR(value)[3]);
|
74
|
+
xsettings_manager_set_color(_self, name, &col);
|
75
|
+
}
|
76
|
+
break;
|
77
|
+
}
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
= module XSettings
|
2
|
+
== class XSettings::Manager
|
3
|
+
--- XSettings::Manager.exists?
|
4
|
+
|
5
|
+
--- XSettings::Manager__alloc__()
|
6
|
+
|
7
|
+
|
8
|
+
--- XSettings::Manager#terminated
|
9
|
+
|
10
|
+
--- XSettings::Manager#destroy
|
11
|
+
|
12
|
+
--- XSettings::Manager#notify
|
13
|
+
|
14
|
+
--- XSettings::Manager#[]=(String name, value)
|
15
|
+
|
16
|
+
|
data/lib/xsettings.rb
ADDED
metadata
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xsettings-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Geoff Youngs
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-07-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rubber-generate
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.0.17
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.0.17
|
27
|
+
description: |+
|
28
|
+
XSettings Manager bindings for ruby
|
29
|
+
|
30
|
+
e.g
|
31
|
+
require 'gtk2'
|
32
|
+
require 'xsettings-ruby'
|
33
|
+
|
34
|
+
email: git@intersect-uk.co.uk
|
35
|
+
executables: []
|
36
|
+
extensions:
|
37
|
+
- ext/xsettings/extconf.rb
|
38
|
+
extra_rdoc_files: []
|
39
|
+
files:
|
40
|
+
- ext/xsettings/xsettings-common.c
|
41
|
+
- ext/xsettings/xsettings-common.h
|
42
|
+
- ext/xsettings/xsettings-manager.c
|
43
|
+
- ext/xsettings/xsettings-manager.h
|
44
|
+
- ext/xsettings/xsettings.c
|
45
|
+
- ext/xsettings/xsettings.cr
|
46
|
+
- ext/xsettings/xsettings.rd
|
47
|
+
- Rakefile
|
48
|
+
- README.md
|
49
|
+
- lib/xsettings.rb
|
50
|
+
- lib/xsettings/version.rb
|
51
|
+
- ext/xsettings/extconf.rb
|
52
|
+
homepage: http://github.com/geoffyoungs/xsettings-ruby
|
53
|
+
licenses: []
|
54
|
+
metadata: {}
|
55
|
+
post_install_message:
|
56
|
+
rdoc_options: []
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
requirements: []
|
70
|
+
rubyforge_project:
|
71
|
+
rubygems_version: 2.0.3
|
72
|
+
signing_key:
|
73
|
+
specification_version: 4
|
74
|
+
summary: xsettings bindings using rubber-generate
|
75
|
+
test_files: []
|