[prev in list] [next in list] [prev in thread] [next in thread]
List: php-gtk-cvs
Subject: [php-gtk-cvs] cvs: php-gtk / php_gtk.m4 /ext/gtk+ Makefile.frag gtk.defs gtk.overrides gtkclipboard
From: "Andrei Zmievski" <andrei () php ! net>
Date: 2006-09-17 20:56:27
Message-ID: cvsandrei1158526587 () cvsserver
[Download RAW message or body]
andrei Sun Sep 17 20:56:27 2006 UTC
Added files:
/php-gtk/ext/gtk+ gtkclipboard.overrides
Modified files:
/php-gtk php_gtk.m4
/php-gtk/ext/gtk+ Makefile.frag gtk.defs gtk.overrides php_gdk.c
php_gtk+.c
/php-gtk/generator arg_types.php generator.php templates.php
Log:
Some clipboard support.
["andrei-20060917205627.txt" (text/plain)]
http://cvs.php.net/viewvc.cgi/php-gtk/php_gtk.m4?r1=1.27&r2=1.28&diff_format=u
Index: php-gtk/php_gtk.m4
diff -u php-gtk/php_gtk.m4:1.27 php-gtk/php_gtk.m4:1.28
--- php-gtk/php_gtk.m4:1.27 Sat Jun 10 19:53:12 2006
+++ php-gtk/php_gtk.m4 Sun Sep 17 20:56:27 2006
@@ -562,3 +562,4 @@
AC_ARG_WITH($1,[$3],$5=[$]withval,$5=ifelse($4,,no,$4))
PHP_GTK_ARG_ANALYZE($5)
])
+
http://cvs.php.net/viewvc.cgi/php-gtk/ext/gtk+/Makefile.frag?r1=1.20&r2=1.21&diff_format=u
Index: php-gtk/ext/gtk+/Makefile.frag
diff -u php-gtk/ext/gtk+/Makefile.frag:1.20 php-gtk/ext/gtk+/Makefile.frag:1.21
--- php-gtk/ext/gtk+/Makefile.frag:1.20 Sat Feb 4 21:46:18 2006
+++ php-gtk/ext/gtk+/Makefile.frag Sun Sep 17 20:56:27 2006
@@ -4,6 +4,7 @@
GTK_OVERRIDES = \
$(srcdir)/gtk.overrides \
+ $(srcdir)/gtkclipboard.overrides \
$(srcdir)/gtkcontainer.overrides \
$(srcdir)/gtkstyle.overrides \
$(srcdir)/gtktextview.overrides \
http://cvs.php.net/viewvc.cgi/php-gtk/ext/gtk+/gtk.defs?r1=1.48&r2=1.49&diff_format=u
Index: php-gtk/ext/gtk+/gtk.defs
diff -u php-gtk/ext/gtk+/gtk.defs:1.48 php-gtk/ext/gtk+/gtk.defs:1.49
--- php-gtk/ext/gtk+/gtk.defs:1.48 Mon Jul 10 20:48:59 2006
+++ php-gtk/ext/gtk+/gtk.defs Sun Sep 17 20:56:27 2006
@@ -2370,8 +2370,8 @@
(define-function clipboard_get_for_display
(is-constructor-of "GtkClipboard")
(c-name "gtk_clipboard_get_for_display")
- (caller-owns-return #t)
(return-type "GtkClipboard*")
+ (caller-owns-return #f)
(parameters
'("GdkDisplay*" "display" (default "gdk_display_get_default()"))
'("GdkAtom" "selection" (default "GDK_SELECTION_CLIPBOARD"))
http://cvs.php.net/viewvc.cgi/php-gtk/ext/gtk+/gtk.overrides?r1=1.210&r2=1.211&diff_format=u
Index: php-gtk/ext/gtk+/gtk.overrides
diff -u php-gtk/ext/gtk+/gtk.overrides:1.210 php-gtk/ext/gtk+/gtk.overrides:1.211
--- php-gtk/ext/gtk+/gtk.overrides:1.210 Sat Sep 9 17:58:57 2006
+++ php-gtk/ext/gtk+/gtk.overrides Sun Sep 17 20:56:27 2006
@@ -5009,6 +5009,7 @@
%% }}}
+%% include gtkclipboard.overrides
%% include gtkcontainer.overrides
%% include gtkdrag.overrides
%% include gtkstyle.overrides
http://cvs.php.net/viewvc.cgi/php-gtk/ext/gtk+/php_gdk.c?r1=1.7&r2=1.8&diff_format=u
Index: php-gtk/ext/gtk+/php_gdk.c
diff -u php-gtk/ext/gtk+/php_gdk.c:1.7 php-gtk/ext/gtk+/php_gdk.c:1.8
--- php-gtk/ext/gtk+/php_gdk.c:1.7 Fri Apr 14 16:55:31 2006
+++ php-gtk/ext/gtk+/php_gdk.c Sun Sep 17 20:56:27 2006
@@ -18,7 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: php_gdk.c,v 1.7 2006/04/14 16:55:31 sfox Exp $: */
+/* $Id: php_gdk.c,v 1.8 2006/09/17 20:56:27 andrei Exp $: */
#include "php_gtk.h"
#if HAVE_PHP_GTK
@@ -28,7 +28,7 @@
extern zend_class_entry *gdk_ce;
-void php_gdk_register_keysyms()
+void phpg_gdk_register_keysyms()
{
phpg_register_int_constant(gdk_ce, "KEY_VoidSymbol", sizeof("KEY_VoidSymbol")-1, \
GDK_VoidSymbol); phpg_register_int_constant(gdk_ce, "KEY_BackSpace", \
sizeof("KEY_BackSpace")-1, GDK_BackSpace); \
http://cvs.php.net/viewvc.cgi/php-gtk/ext/gtk+/php_gtk+.c?r1=1.25&r2=1.26&diff_format=u
Index: php-gtk/ext/gtk+/php_gtk+.c
diff -u php-gtk/ext/gtk+/php_gtk+.c:1.25 php-gtk/ext/gtk+/php_gtk+.c:1.26
--- php-gtk/ext/gtk+/php_gtk+.c:1.25 Sat Feb 18 19:49:34 2006
+++ php-gtk/ext/gtk+/php_gtk+.c Sun Sep 17 20:56:27 2006
@@ -18,7 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: php_gtk+.c,v 1.25 2006/02/18 19:49:34 andrei Exp $: */
+/* $Id: php_gtk+.c,v 1.26 2006/09/17 20:56:27 andrei Exp $: */
#include "php_gtk.h"
#include "SAPI.h"
@@ -30,9 +30,10 @@
PHP_GTK_API int le_gtk_object;
PHP_GTK_API zend_class_entry *php_gtk_exception_ce;
extern zend_class_entry *gtk_ce;
+extern zend_class_entry *gdk_ce;
/* defined in php_gdk.c */
-void php_gdk_register_keysyms();
+void phpg_gdk_register_keysyms();
/* TODO check pygtk version */
static void init_gtk(void)
@@ -144,7 +145,7 @@
}
*/
-static void register_stock_constants()
+static void phpg_register_stock_constants()
{
GSList *stock_ids, *item;
char buf[128];
@@ -174,6 +175,33 @@
g_slist_free(stock_ids);
}
+#define register_atom(name) \
+ { \
+ gchar *__atom_name = gdk_atom_name((GDK_##name)); \
+ phpg_register_string_constant(gdk_ce, #name, strlen(#name), __atom_name, \
strlen(__atom_name)); \ + g_free(__atom_name); \
+ }
+static void phpg_register_atoms()
+{
+ register_atom(SELECTION_PRIMARY);
+ register_atom(SELECTION_SECONDARY);
+ register_atom(SELECTION_CLIPBOARD);
+ register_atom(TARGET_BITMAP);
+ register_atom(TARGET_COLORMAP);
+ register_atom(TARGET_DRAWABLE);
+ register_atom(TARGET_PIXMAP);
+ register_atom(TARGET_STRING);
+ register_atom(SELECTION_TYPE_ATOM);
+ register_atom(SELECTION_TYPE_BITMAP);
+ register_atom(SELECTION_TYPE_COLORMAP);
+ register_atom(SELECTION_TYPE_DRAWABLE);
+ register_atom(SELECTION_TYPE_INTEGER);
+ register_atom(SELECTION_TYPE_PIXMAP);
+ register_atom(SELECTION_TYPE_WINDOW);
+ register_atom(SELECTION_TYPE_STRING);
+}
+#undef register_atom
+
PHP_GTK_XINIT_FUNCTION(gtk_plus)
{
//register_exception(TSRMLS_C);
@@ -188,9 +216,10 @@
phpg_pango_register_constants("PANGO_");
phpg_gdk_register_constants("GDK_");
phpg_gtk_register_constants("GTK_");
- register_stock_constants();
- php_gdk_register_keysyms();
+ phpg_register_stock_constants();
+ phpg_gdk_register_keysyms();
+ phpg_register_atoms();
php_gtk_plus_register_types(TSRMLS_C);
http://cvs.php.net/viewvc.cgi/php-gtk/generator/arg_types.php?r1=1.82&r2=1.83&diff_format=u
Index: php-gtk/generator/arg_types.php
diff -u php-gtk/generator/arg_types.php:1.82 php-gtk/generator/arg_types.php:1.83
--- php-gtk/generator/arg_types.php:1.82 Sun Jul 30 19:17:54 2006
+++ php-gtk/generator/arg_types.php Sun Sep 17 20:56:27 2006
@@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: arg_types.php,v 1.82 2006/07/30 19:17:54 andrei Exp $ */
+/* $Id: arg_types.php,v 1.83 2006/09/17 20:56:27 andrei Exp $ */
/*======================================================================*\
Function: convert_typename
@@ -748,7 +748,7 @@
'on_error' => \
$info->error_action)); }
$info->arg_list[] = $name;
- $info->add_parse_list('O', array('&php_' . $name, 'gdkatom_ce'));
+ $info->add_parse_list('V', '&php_' . $name);
}
function write_return($type, $owns_return, $info)
http://cvs.php.net/viewvc.cgi/php-gtk/generator/generator.php?r1=1.115&r2=1.116&diff_format=u
Index: php-gtk/generator/generator.php
diff -u php-gtk/generator/generator.php:1.115 php-gtk/generator/generator.php:1.116
--- php-gtk/generator/generator.php:1.115 Fri Jun 23 04:11:49 2006
+++ php-gtk/generator/generator.php Sun Sep 17 20:56:27 2006
@@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: generator.php,v 1.115 2006/06/23 04:11:49 andrei Exp $ */
+/* $Id: generator.php,v 1.116 2006/09/17 20:56:27 andrei Exp $ */
/*
* Significant portions of this generator are based on the pygtk code generator
@@ -373,7 +373,7 @@
if ($ctors) {
$dict['class'] = $object->c_name;
- $dict['typecode'] = $object->typecode;;
+ $dict['typecode'] = $object->typecode;
$first = 1;
foreach ($ctors as $ctor) {
@@ -382,6 +382,9 @@
$ctor_fe_name = '__construct';
$flags = 'ZEND_ACC_PUBLIC';
$template_name = 'constructor';
+ if (!$ctor->caller_owns_return) {
+ $dict['post_create_code'] = "\tg_object_ref(wrapped_obj);";
+ }
} else {
// remove class name from the constructor name, i.e. turn
// gtk_button_new_with_mnemonic into new_with_mnemonic
@@ -1353,7 +1356,8 @@
'float' => 'double',
'gfloat' => 'double',
- 'GdkDrawable*' => 'GdkWindow');
+ 'GdkDrawable*' => 'GdkWindow',
+ 'GdkAtom' => 'string');
return isset($type_map[$in_type]);
}//function is_php_type($in_type)
http://cvs.php.net/viewvc.cgi/php-gtk/generator/templates.php?r1=1.52&r2=1.53&diff_format=u
Index: php-gtk/generator/templates.php
diff -u php-gtk/generator/templates.php:1.52 php-gtk/generator/templates.php:1.53
--- php-gtk/generator/templates.php:1.52 Sun Jun 25 10:48:07 2006
+++ php-gtk/generator/templates.php Sun Sep 17 20:56:27 2006
@@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: templates.php,v 1.52 2006/06/25 10:48:07 sfox Exp $ */
+/* $Id: templates.php,v 1.53 2006/09/17 20:56:27 andrei Exp $ */
class Templates {
const function_call = "%s(%s)";
@@ -62,6 +62,7 @@
if (!wrapped_obj) {
PHPG_THROW_CONSTRUCT_EXCEPTION(%(class));
}
+%(post_create_code)
phpg_gobject_set_wrapper(this_ptr, wrapped_obj TSRMLS_CC);
}\n\n";
http://cvs.php.net/viewvc.cgi/php-gtk/ext/gtk+/gtkclipboard.overrides?view=markup&rev=1.1
Index: php-gtk/ext/gtk+/gtkclipboard.overrides
+++ php-gtk/ext/gtk+/gtkclipboard.overrides
/* vim: set et ft=cpp fdm=marker: */
/* TODO figure out why gtk_clipboard_finalize is not called */
%% {{{ ignores
%%
ignore
gtk_clipboard_set_with_owner
%% }}}
%% {{{ gtk_clipboard_request_targets
%%
override gtk_clipboard_request_targets
static void phpg_clipboard_request_targets_marshal(GtkClipboard *clipboard,
GdkAtom *atoms,
gint n_atoms,
gpointer user_data)
{
phpg_cb_data_t *cbd = (phpg_cb_data_t *) user_data;
zval *retval = NULL;
zval ***args = NULL;
int n_args = 0;
char *callback_name;
zval *php_clipboard = NULL;
zval *php_atoms = NULL;
gchar *name;
int i;
TSRMLS_FETCH();
if (!zend_is_callable(cbd->callback, 0, &callback_name)) {
php_error(E_WARNING, "Unable to invoke callback '%s' specified in %s on line \
%ld", callback_name, cbd->src_filename, cbd->src_lineno); efree(callback_name);
return;
}
phpg_gobject_new(&php_clipboard, (GObject*)clipboard TSRMLS_CC);
MAKE_STD_ZVAL(php_atoms);
array_init(php_atoms);
for (i = 0; i < n_atoms; i++) {
name = gdk_atom_name(atoms[i]);
add_next_index_string(php_atoms, name, 1);
g_free(name);
}
args = php_gtk_hash_as_array_offset(cbd->user_args, 2, &n_args);
args[0] = &php_clipboard;
args[1] = &php_atoms;
call_user_function_ex(EG(function_table), NULL, cbd->callback, &retval, n_args, \
args, 0, NULL TSRMLS_CC);
zval_ptr_dtor(&php_clipboard);
zval_ptr_dtor(&php_atoms);
if (retval) {
zval_ptr_dtor(&retval);
}
phpg_handle_marshaller_exception(TSRMLS_C);
efree(callback_name);
efree(args);
phpg_cb_data_destroy(cbd);
}
PHP_METHOD
{
zval *callback, *extra;
phpg_cb_data_t *cbd;
NOT_STATIC_METHOD();
if (!php_gtk_parse_varargs(ZEND_NUM_ARGS(), 1, &extra, "V", &callback))
return;
zval_add_ref(&callback);
cbd = phpg_cb_data_new(callback, extra TSRMLS_CC);
gtk_clipboard_request_targets(GTK_CLIPBOARD(PHPG_GOBJECT(this_ptr)),
phpg_clipboard_request_targets_marshal, cbd);
RETURN_TRUE;
}
%% }}}
%% {{{ gtk_clipboard_request_text
%%
override gtk_clipboard_request_text
static void phpg_clipboard_request_text_marshal(GtkClipboard *clipboard,
const gchar *text,
gpointer user_data)
{
phpg_cb_data_t *cbd = (phpg_cb_data_t *) user_data;
zval *retval = NULL;
zval ***args = NULL;
int n_args = 0;
char *callback_name;
zval *php_clipboard = NULL;
zval *php_text = NULL;
gchar *cp_str;
gsize cp_len;
zend_bool free_cp_str;
TSRMLS_FETCH();
if (!zend_is_callable(cbd->callback, 0, &callback_name)) {
php_error(E_WARNING, "Unable to invoke callback '%s' specified in %s on line \
%ld", callback_name, cbd->src_filename, cbd->src_lineno); efree(callback_name);
return;
}
phpg_gobject_new(&php_clipboard, (GObject*)clipboard TSRMLS_CC);
MAKE_STD_ZVAL(php_text);
if (text) {
cp_str = phpg_from_utf8(text, strlen(text), &cp_len, &free_cp_str TSRMLS_CC);
if (cp_str) {
ZVAL_STRINGL(php_text, cp_str, cp_len, 1);
if (free_cp_str) {
g_free(cp_str);
}
} else {
ZVAL_NULL(php_text);
}
} else {
ZVAL_NULL(php_text);
}
args = php_gtk_hash_as_array_offset(cbd->user_args, 2, &n_args);
args[0] = &php_clipboard;
args[1] = &php_text;
call_user_function_ex(EG(function_table), NULL, cbd->callback, &retval, n_args, \
args, 0, NULL TSRMLS_CC);
zval_ptr_dtor(&php_clipboard);
zval_ptr_dtor(&php_text);
if (retval) {
zval_ptr_dtor(&retval);
}
phpg_handle_marshaller_exception(TSRMLS_C);
efree(callback_name);
efree(args);
phpg_cb_data_destroy(cbd);
}
PHP_METHOD
{
zval *callback, *extra;
phpg_cb_data_t *cbd;
NOT_STATIC_METHOD();
if (!php_gtk_parse_varargs(ZEND_NUM_ARGS(), 1, &extra, "V", &callback))
return;
zval_add_ref(&callback);
cbd = phpg_cb_data_new(callback, extra TSRMLS_CC);
gtk_clipboard_request_text(GTK_CLIPBOARD(PHPG_GOBJECT(this_ptr)),
phpg_clipboard_request_text_marshal, cbd);
RETURN_TRUE;
}
%% }}}
%% {{{ gtk_clipboard_set_with_data
%%
override gtk_clipboard_set_with_data
typedef struct {
phpg_cb_data_t *get_cb_data;
phpg_cb_data_t *clear_cb_data;
} phpg_clipboard_set_info;
static void phpg_clipboard_get_func_marshal(GtkClipboard *clipboard,
GtkSelectionData *selection_data,
guint info,
gpointer user_data)
{
zval *retval = NULL;
zval ***args = NULL;
int n_args = 0;
char *callback_name;
zval *php_clipboard = NULL;
zval *php_selection_data = NULL;
zval *php_info = NULL;
phpg_clipboard_set_info *set_info = (phpg_clipboard_set_info *) user_data;
TSRMLS_FETCH();
if (!zend_is_callable(set_info->get_cb_data->callback, 0, &callback_name)) {
php_error(E_WARNING, "Unable to invoke callback '%s' specified in %s on line \
%ld", callback_name, set_info->get_cb_data->src_filename, \
set_info->get_cb_data->src_lineno); efree(callback_name);
return;
}
phpg_gobject_new(&php_clipboard, (GObject*)clipboard TSRMLS_CC);
phpg_gboxed_new(&php_selection_data, GTK_TYPE_SELECTION_DATA, selection_data, \
FALSE, FALSE TSRMLS_CC); MAKE_STD_ZVAL(php_info);
ZVAL_LONG(php_info, info);
args = php_gtk_hash_as_array_offset(set_info->get_cb_data->user_args, 3, \
&n_args); args[0] = &php_clipboard;
args[1] = &php_selection_data;
args[2] = &php_info;
call_user_function_ex(EG(function_table), NULL, set_info->get_cb_data->callback, \
&retval, n_args, args, 0, NULL TSRMLS_CC);
zval_ptr_dtor(&php_clipboard);
zval_ptr_dtor(&php_selection_data);
zval_ptr_dtor(&php_info);
if (retval) {
zval_ptr_dtor(&retval);
}
phpg_handle_marshaller_exception(TSRMLS_C);
efree(callback_name);
efree(args);
}
static void phpg_clipboard_clear_func_marshal(GtkClipboard *clipboard,
gpointer user_data)
{
zval *retval = NULL;
zval ***args = NULL;
int n_args = 0;
char *callback_name;
zval *php_clipboard = NULL;
phpg_clipboard_set_info *set_info = (phpg_clipboard_set_info *) user_data;
TSRMLS_FETCH();
if (!zend_is_callable(set_info->clear_cb_data->callback, 0, &callback_name)) {
php_error(E_WARNING, "Unable to invoke callback '%s' specified in %s on line \
%ld", callback_name, set_info->clear_cb_data->src_filename, \
set_info->clear_cb_data->src_lineno); efree(callback_name);
return;
}
phpg_gobject_new(&php_clipboard, (GObject*)clipboard TSRMLS_CC);
args = php_gtk_hash_as_array_offset(set_info->clear_cb_data->user_args, 1, \
&n_args); args[0] = &php_clipboard;
call_user_function_ex(EG(function_table), NULL, \
set_info->clear_cb_data->callback, &retval, n_args, args, 0, NULL TSRMLS_CC);
zval_ptr_dtor(&php_clipboard);
if (retval) {
zval_ptr_dtor(&retval);
}
phpg_handle_marshaller_exception(TSRMLS_C);
efree(callback_name);
efree(args);
phpg_cb_data_destroy(set_info->get_cb_data);
phpg_cb_data_destroy(set_info->clear_cb_data);
efree(set_info);
}
PHP_METHOD
{
zval *get_cb, *clear_cb, *php_targets, *extra;
phpg_clipboard_set_info *set_info;
GtkTargetEntry *entries;
gboolean ret;
int n;
NOT_STATIC_METHOD();
if (!php_gtk_parse_varargs(ZEND_NUM_ARGS(), 3, &extra, "aVV", &php_targets, &get_cb, \
&clear_cb)) return;
zval_add_ref(&get_cb);
zval_add_ref(&clear_cb);
if (extra) {
zval_add_ref(&extra);
}
set_info = emalloc(sizeof(phpg_clipboard_set_info));
set_info->get_cb_data = phpg_cb_data_new(get_cb, extra TSRMLS_CC);
set_info->clear_cb_data = phpg_cb_data_new(clear_cb, extra TSRMLS_CC);
entries = phpg_parse_target_entries(php_targets, &n TSRMLS_CC);
ret = gtk_clipboard_set_with_data(GTK_CLIPBOARD(PHPG_GOBJECT(this_ptr)), entries, \
n, phpg_clipboard_get_func_marshal,
phpg_clipboard_clear_func_marshal,
set_info);
efree(entries);
RETURN_BOOL(ret);
}
%% }}}
%% {{{ gtk_clipboard_wait_for_targets
%%
override gtk_clipboard_wait_for_targets
PHP_METHOD
{
GtkSelectionData *data;
NOT_STATIC_METHOD();
if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "")) {
return;
}
/* have to work around GTK+ bug #139883 */
data = gtk_clipboard_wait_for_contents(GTK_CLIPBOARD(PHPG_GOBJECT(this_ptr)),
gdk_atom_intern("TARGETS", FALSE));
if (data) {
gint n_targets = 0;
GdkAtom *targets = NULL;
if (gtk_selection_data_get_targets(data, &targets, &n_targets)) {
gchar *name;
int i;
array_init(return_value);
for (i = 0; i < n_targets; i++) {
name = gdk_atom_name(targets[i]);
add_next_index_string(return_value, name, 1);
g_free(name);
}
g_free(targets);
}
gtk_selection_data_free(data);
}
}
%% }}}
--
PHP-GTK CVS Mailing List (http://gtk.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic