[prev in list] [next in list] [prev in thread] [next in thread] 

List:       php-gtk-cvs
Subject:    [php-gtk-cvs] com gtk/php-gtk: A couple more clipboard methods.: ext/gtk+/gtkclipboard.overrides
From:       David Soria Parra <dsp () php ! net>
Date:       2006-09-23 19:06:34
Message-ID: php-mail-ee61d8105d31eb0a384ef1b1a7c78344299148653 () git ! php ! net
[Download RAW message or body]

Commit:    00bf1efa66f9ea30fb37ecb32907a3b27c0d1564
Author:    Andrei Zmievski <andrei@php.net>         Sat, 23 Sep 2006 19:06:34 +0000
Parents:   3166d2fc439ad6a48833f7774f3d0852d472d323
Branches:  master

Link:       http://git.php.net/?p=gtk/php-gtk.git;a=commitdiff;h=00bf1efa66f9ea30fb37ecb32907a3b27c0d1564


Log:
A couple more clipboard methods.

Changed paths:
  M  ext/gtk+/gtkclipboard.overrides


Diff:
00bf1efa66f9ea30fb37ecb32907a3b27c0d1564
diff --git a/ext/gtk+/gtkclipboard.overrides b/ext/gtk+/gtkclipboard.overrides
index 5e78f73..ebf2bd7 100644
--- a/ext/gtk+/gtkclipboard.overrides
+++ b/ext/gtk+/gtkclipboard.overrides
@@ -8,6 +8,78 @@ ignore
     gtk_clipboard_set_with_owner
 %% }}}
 
+%%
+override gtk_clipboard_request_contents
+
+static void phpg_clipboard_request_contents_marshal(GtkClipboard *clipboard,
+                                                    GtkSelectionData \
*selection_data, +                                                    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_sel_data = NULL;
+    
+    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);
+    phpg_gboxed_new(&php_sel_data, GTK_TYPE_SELECTION_DATA, selection_data, TRUE, \
TRUE TSRMLS_CC); +
+    args = php_gtk_hash_as_array_offset(cbd->user_args, 2, &n_args);
+    args[0] = &php_clipboard;
+    args[1] = &php_sel_data;
+
+    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_sel_data);
+
+    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 *php_target, *callback, *extra;
+    phpg_cb_data_t *cbd;
+    GdkAtom target;
+
+	NOT_STATIC_METHOD();
+
+	if (!php_gtk_parse_varargs(ZEND_NUM_ARGS(), 2, &extra, "VV", &php_target, \
&callback)) +		return;
+    
+    target = phpg_gdkatom_from_zval(php_target TSRMLS_CC);
+    if (target == NULL) {
+        php_error(E_WARNING, "%s::%s() expects target argument to be a valid GdkAtom \
object", +                  get_active_class_name(NULL TSRMLS_CC), \
get_active_function_name(TSRMLS_C)); +        return;
+    }
+
+    zval_add_ref(&callback);
+    cbd = phpg_cb_data_new(callback, extra TSRMLS_CC);
+
+    gtk_clipboard_request_contents(GTK_CLIPBOARD(PHPG_GOBJECT(this_ptr)), target,
+                                   phpg_clipboard_request_contents_marshal, cbd);
+    RETURN_TRUE;
+}
+
 %% {{{ gtk_clipboard_request_targets
 
 %%
@@ -341,4 +413,29 @@ PHP_METHOD
     }
 }
 
+%%
+override gtk_clipboard_set_can_store
+PHP_METHOD
+{
+    zval *php_targets = NULL;
+	GtkTargetEntry *entries;
+    int n;
+
+	NOT_STATIC_METHOD();
+
+	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "a!", &php_targets))
+		return;
+
+    if (php_targets) {
+        entries = phpg_parse_target_entries(php_targets, &n TSRMLS_CC);
+    } else {
+        entries = NULL;
+        n = 0;
+    }
+
+    gtk_clipboard_set_can_store(GTK_CLIPBOARD(PHPG_GOBJECT(this_ptr)), entries, n);
+    efree(entries);
+    RETURN_TRUE;
+}
+
 %% }}}


--
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