com gtk/php-gtk: GtkFileSelection: - get_filename([conver t]) - get_filenames([convert]): ext/gtk+/ gtk.overrides

[email protected] (David Soria Parra) Tue, 14 Mar 2006 09:14:03 +0000
Newsgroups php.gtk.cvs
Message-ID <[email protected]>
Commit:    5c0549db96827f99b905d627be36dfe6895af60e
Author:    Christian Weiske <[email protected]>         Tue, 14 Mar 2006 09:14:03 +0000
Parents:   059b9cd4c8c6c1b0654de2c798c453fcd918905b
Branches:  master

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

Log:
GtkFileSelection:
- get_filename([convert])
- get_filenames([convert])

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


Diff:
5c0549db96827f99b905d627be36dfe6895af60e
diff --git a/ext/gtk+/gtk.overrides b/ext/gtk+/gtk.overrides
index d2eee06..648a9bc 100644
--- a/ext/gtk+/gtk.overrides
+++ b/ext/gtk+/gtk.overrides
@@ -1357,16 +1357,59 @@ PHP_METHOD
 
 %% {{{ GtkFileSelection
 
+
+
+%%
+override gtk_file_selection_get_filename
+PHP_METHOD
+{
+    const gchar *php_retval;
+    gchar *cp_ret;
+    gchar *fn = NULL;
+    gsize cp_len;
+    zend_bool free_result;
+    zend_bool convert = 1;
+
+    NOT_STATIC_METHOD();
+
+    if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "|b", &convert))
+        return;
+
+    php_retval = gtk_file_selection_get_filename(GTK_FILE_SELECTION(PHPG_GOBJECT(this_ptr)));
+    if (php_retval) {
+        if (convert) {
+            fn = g_filename_to_utf8(php_retval, strlen(php_retval), NULL, NULL, NULL);
+            cp_ret = phpg_from_utf8(fn, strlen(fn), &cp_len, &free_result TSRMLS_CC);
+            if (cp_ret) {
+                RETVAL_STRINGL((char *)cp_ret, cp_len, 1);
+            } else {
+                php_error(E_WARNING, "%s::%s(): could not convert return value from UTF-8", get_active_class_name(NULL TSRMLS_CC), get_active_function_name(TSRMLS_C));
+            }
+            if (free_result)
+                g_free(cp_ret);
+        } else {
+            RETVAL_STRINGL((char *)php_retval, strlen(php_retval), 1);
+        }
+    } else {
+        RETVAL_NULL();
+    }
+}
+
 %%
 override gtk_file_selection_get_selections
 PHP_METHOD
 {
     gchar **selections;
     int i = 0;
+    gchar *cp = NULL;
+    gchar *fn = NULL;
+    gsize cp_len = 0;
+    zend_bool free_cp = FALSE;
+    zend_bool convert = 1;
 
     NOT_STATIC_METHOD();
 
-    if (!php_gtk_parse_args(ZEND_NUM_ARGS(), ""))
+    if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "|b", &convert)) 
         return;
 
     selections = gtk_file_selection_get_selections(GTK_FILE_SELECTION(PHPG_GOBJECT(this_ptr))); 
@@ -1375,7 +1418,19 @@ PHP_METHOD
         array_init(return_value);
 
         for (i = 0; selections[i]; i++) {
-            add_next_index_string(return_value, selections[i], 1);
+            if (convert) {
+                fn = g_filename_to_utf8(selections[i], strlen(selections[i]), NULL, NULL, NULL);
+                cp = phpg_from_utf8(fn, strlen(fn), &cp_len, &free_cp TSRMLS_CC);
+                if (cp) {
+                    add_next_index_string(return_value, (char *)cp, 1);
+                } else {
+                    php_error(E_WARNING, "%s::%s(): could not convert return value from UTF-8", get_active_class_name(NULL TSRMLS_CC), get_active_function_name(TSRMLS_C));
+                }
+                if (free_cp)
+                    g_free(cp);
+            } else {
+                add_next_index_string(return_value, selections[i], 1);
+            }
         }
 
         g_strfreev(selections);