* gtk-menu-popup [guile-gnome2 2.16.1-4] @ 2010-06-28 19:15 David Pirotte 2010-06-29 10:04 ` Andy Wingo 0 siblings, 1 reply; 6+ messages in thread From: David Pirotte @ 2010-06-28 19:15 UTC (permalink / raw) To: guile-user just sent but subject line was the wrong one ! Hello, debian [testing/unstable] all guile-gnome2 2.16.1-4 installed gtk-menu-popup the following error: ERROR: In procedure gtk-menu-popup: ERROR: Wrong type argument in position 5: #f is raised by the following code [unmodified since guile-gnome0] (gtk-menu-popup popup-menu #f ;; parent-menu-shell or #f #f ;; parent-menu-item or #f #f ;; user supplied func to position the menu or #f #f ;; user supplied data to pass to func button time) user data to pass to func ... -] when trying to pass '() it raises an error too -] if I pass an integer [just to try]: --] no more errors --] but no popup menu is poped-up :-) Thanks for some hints, David ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: gtk-menu-popup [guile-gnome2 2.16.1-4] 2010-06-28 19:15 gtk-menu-popup [guile-gnome2 2.16.1-4] David Pirotte @ 2010-06-29 10:04 ` Andy Wingo 2010-06-29 14:42 ` David Pirotte 0 siblings, 1 reply; 6+ messages in thread From: Andy Wingo @ 2010-06-29 10:04 UTC (permalink / raw) To: David Pirotte; +Cc: guile-user Hi David, On Mon 28 Jun 2010 21:15, David Pirotte <david@altosw.be> writes: > (gtk-menu-popup popup-menu > #f ;; parent-menu-shell or #f > #f ;; parent-menu-item or #f > #f ;; user supplied func to position the menu or #f > #f ;; user supplied data to pass to func > button > time) This function did change API when going from guile-gnome-0 to guile-gnome-2. I paste below the commit that re-added gtk-menu-popup to guile-gnome-gtk. As you can see the prototype is different -- no user data to the positioning function. Cheers, Andy Parent: b5bfe47421b32f5fc8684725f18be2cd50f07748 (2007-12-17 Jan Nieuwenhuizen <janneke@gnu.org>) Child: 3c4f31cba340a85f6545409a409f53a4a401f393 (Update NEWS for release) Branches: gtk, remotes/origin/gtk Follows: Precedes: 2008-04-10 Andy Wingo <wingo@pobox.com> * gnome/overrides/gtk.defs (popup): * gnome/gw/gtk-support.h: * gnome/gw/gtk-support.c (menu_position_fn) (_wrap_gtk_menu_popup): Wrap gtk-menu-popup, with a scheme positioning function and no user-data argument. ---------------------------------- ChangeLog ---------------------------------- index 96f736c..5d828a0 100644 @@ -1,3 +1,11 @@ +2008-04-10 Andy Wingo <wingo@pobox.com> + + * gnome/overrides/gtk.defs (popup): + * gnome/gw/gtk-support.h: + * gnome/gw/gtk-support.c (menu_position_fn) + (_wrap_gtk_menu_popup): Wrap gtk-menu-popup, with a scheme + positioning function and no user-data argument. + 2007-12-17 Jan Nieuwenhuizen <janneke@gnu.org> * gnome/gw/gtk-support.h: ---------------------------- gnome/gw/gtk-support.c ---------------------------- index cc0c17f..998f8a1 100644 @@ -413,6 +413,33 @@ _wrap_gtk_list_store_append (GtkListStore *store) return new; } +static void +menu_position_fn (GtkMenu *menu, gint *x, gint *y, gboolean *push_in, + gpointer data) +{ + SCM ret, proc = GPOINTER_TO_SCM (data); + + ret = scm_call_1 (proc, scm_c_gtype_instance_to_scm (menu)); + + *x = scm_to_int32 (scm_car (ret)); + *y = scm_to_int32 (scm_cadr (ret)); + *push_in = scm_is_true (scm_caddr (ret)); +} + +void +_wrap_gtk_menu_popup (GtkMenu *menu, GtkWidget *parent_menu_shell, + GtkWidget *parent_menu_item, SCM func, + guint button, guint32 activate_time) +{ + if (scm_is_true (func)) + gtk_menu_popup (menu, parent_menu_shell, parent_menu_item, + menu_position_fn, SCM_TO_GPOINTER (func), + button, activate_time); + else + gtk_menu_popup (menu, parent_menu_shell, parent_menu_item, + NULL, NULL, button, activate_time); +} + /* FIXME: is this still necessary? */ SCM _wrap_gtk_message_dialog_new (GtkWindow* parent, GtkDialogFlags flags, GtkMessageType type, ---------------------------- gnome/gw/gtk-support.h ---------------------------- index 71cde36..0326cd1 100644 @@ -59,6 +59,10 @@ GtkTreeIter* _wrap_gtk_list_store_insert_after (GtkListStore *store, GtkTreeIter GtkTreeIter* _wrap_gtk_list_store_prepend (GtkListStore *store); GtkTreeIter* _wrap_gtk_list_store_append (GtkListStore *store); +void _wrap_gtk_menu_popup (GtkMenu *menu, GtkWidget *parent_menu_shell, + GtkWidget *parent_menu_item, SCM func, + guint button, guint32 activate_time); + SCM _wrap_gtk_message_dialog_new (GtkWindow* parent, GtkDialogFlags flags, GtkMessageType type, GtkButtonsType buttons, const gchar *text); gchar* _gtk_selection_data_get_as_string (GtkSelectionData *data); --------------------------- gnome/overrides/gtk.defs --------------------------- index 8edb1fd..e69a5a2 100644 @@ -303,6 +303,21 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; GtkMenu +(define-method popup + (of-object "GtkMenu") + (c-name "_wrap_gtk_menu_popup") + (overrides "gtk_menu_popup") + (return-type "none") + (leave-guile-mode #f) + (parameters + '("GtkWidget*" "parent_menu_shell" (null-ok)) + '("GtkWidget*" "parent_menu_item" (null-ok)) + '("SCM" "menu_position_func") + '("guint" "button") + '("guint32" "activate_time") + ) +) + (define-function gtk_menu_get_for_attach_widget (c-name "gtk_menu_get_for_attach_widget") (overrides "gtk_menu_get_for_attach_widget") @@ -1100,7 +1115,6 @@ "gtk_list_unselect_child" "gtk_list_unselect_item" "gtk_menu_attach_to_widget" - "gtk_menu_popup" "gtk_message_dialog_format_secondary_markup" "gtk_message_dialog_format_secondary_text" "gtk_notebook_query_tab_label_packing" -- http://wingolog.org/ ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: gtk-menu-popup [guile-gnome2 2.16.1-4] 2010-06-29 10:04 ` Andy Wingo @ 2010-06-29 14:42 ` David Pirotte 2010-07-01 10:49 ` Andy Wingo 0 siblings, 1 reply; 6+ messages in thread From: David Pirotte @ 2010-06-29 14:42 UTC (permalink / raw) To: Andy Wingo; +Cc: guile-user Hi Andy, Thank you! It's working! What confused me is that the doc @ http://www.gnu.org/software/guile-gnome/docs/gtk/html/GtkMenu.html#GtkMenu [which I [re]red before to write to the list] is partially correct because the argument list in the function def is correct [but I didn't catch that as they are all on one line, I guess], where as the explanation of each argument below the function def still mention 'data' [which I did red well because they on separate lines ... :-)] Cheers, David did you see my message about get-path-at-pos? ;; -- — Function: gtk-menu-popup (self <gtk-menu>) (parent_menu_shell <gtk-widget>) (parent_menu_item <gtk-widget>) (menu_position_func scm) (button unsigned-int) (activate_time unsigned-int32) — Method: popup Displays a menu and makes it available for selection. Applications can use this function to display context-sensitive menus, and will typically supply ‘#f’ for the parent-menu-shell, parent-menu-item, func and data parameters. The default menu positioning function will position the menu at the current mouse cursor position. The button parameter should be the mouse button pressed to initiate the menu popup. If the menu popup was initiated by something other than a mouse button press, such as a mouse button release or a keypress, button should be 0. The activate-time parameter should be the time stamp of the event that initiated the popup. If such an event is not available, use gtk-get-current-event-time instead. menu a <gtk-menu>. parent-menu-shell the menu shell containing the triggering menu item, or ‘#f’ parent-menu-item the menu item whose activation triggered the popup, or ‘#f’ func a user supplied function used to position the menu, or ‘#f’ data user supplied data to be passed to func. button the mouse button which was pressed to initiate the event. activate-time the time at which the activation event occurred. ;; -- Le Tue, 29 Jun 2010 12:04:27 +0200, Andy Wingo <wingo@pobox.com> a écrit : > Hi David, > > On Mon 28 Jun 2010 21:15, David Pirotte <david@altosw.be> writes: > > > (gtk-menu-popup popup-menu > > #f ;; parent-menu-shell or #f > > #f ;; parent-menu-item or #f > > #f ;; user supplied func to position the menu > > or #f #f ;; user supplied data to pass to func > > button > > time) > > This function did change API when going from guile-gnome-0 to > guile-gnome-2. I paste below the commit that re-added gtk-menu-popup to > guile-gnome-gtk. As you can see the prototype is different -- no user > data to the positioning function. > > Cheers, > Andy > ... ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: gtk-menu-popup [guile-gnome2 2.16.1-4] 2010-06-29 14:42 ` David Pirotte @ 2010-07-01 10:49 ` Andy Wingo 2010-07-02 3:37 ` David Pirotte 0 siblings, 1 reply; 6+ messages in thread From: Andy Wingo @ 2010-07-01 10:49 UTC (permalink / raw) To: David Pirotte; +Cc: guile-user On Tue 29 Jun 2010 15:42, David Pirotte <david@altosw.be> writes: > did you see my message about get-path-at-pos? Can you please mail a complete and concise description of the problem? Thanks, A -- http://wingolog.org/ ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: gtk-menu-popup [guile-gnome2 2.16.1-4] 2010-07-01 10:49 ` Andy Wingo @ 2010-07-02 3:37 ` David Pirotte 2010-07-08 10:51 ` Andy Wingo 0 siblings, 1 reply; 6+ messages in thread From: David Pirotte @ 2010-07-02 3:37 UTC (permalink / raw) To: Andy Wingo; +Cc: guile-user [-- Attachment #1: Type: text/plain, Size: 981 bytes --] Hello Andy, Sure, attached [feel free to add it to the examples] As it is, it works. But if you uncomment the line 162 [and comment the line 163], then you get the following message: ERROR: No applicable method for #<<generic> get-path-at-pos (1)> in call (get-path-at-pos #<<gtk-tree-view> b6320540> 118 30) Cheers, David ps: the reason i am using this type of coding to bring the popup is because in my 'real code', the popup content depends on the row content, and although gtk selects the row even on a right button click, it is done after the button-press-event signal callback, which prevents me to use the 'normal' get-path method. ;; -- Le Thu, 01 Jul 2010 11:49:43 +0100, Andy Wingo <wingo@pobox.com> a écrit : > On Tue 29 Jun 2010 15:42, David Pirotte <david@altosw.be> writes: > > > did you see my message about get-path-at-pos? > > Can you please mail a complete and concise description of the problem? > > Thanks, > > A [-- Attachment #2: get-path-at-pos.scm --] [-- Type: text/x-scheme, Size: 5681 bytes --] #! /bin/sh # -*- scheme -*- exec guile-gnome-2 -s $0 "$@" !# ;; guile-gnome ;; Copyright (C) 2003,2004 Free Software Foundation, Inc. ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as ;; published by the Free Software Foundation; either version 2 of ;; the License, or (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; if not, contact: ;; ;; Free Software Foundation Voice: +1-617-542-5942 ;; 59 Temple Place - Suite 330 Fax: +1-617-542-2652 ;; Boston, MA 02111-1307, USA gnu@gnu.org (read-set! keywords 'prefix) (use-modules (ice-9 receive) (oop goops) (gnome gobject) (gnome gtk) (gnome gtk gdk-event)) (define *model* #f) (define *selection* #f) (define (pack-tv-column tv column renderer pos) (pack-start column renderer #t) (add-attribute column renderer "text" pos) (append-column tv column)) (define (add-columns treeview) (let* ((renderer1 (make <gtk-cell-renderer-text>)) (column1 (make <gtk-tree-view-column> :title "Column 1" :sizing 'fixed :fixed-width 65 ;:clickable #f ;:resizable #f ;:reorderable #f :alignment .5 )) (renderer2 (make <gtk-cell-renderer-text>)) (column2 (make <gtk-tree-view-column> :title "Column 2" :sizing 'fixed :fixed-width 65 ;:clickable #f ;:resizable #f ;:reorderable #f :alignment .5 )) (renderer3 (make <gtk-cell-renderer-text>)) (column3 (make <gtk-tree-view-column> :title "Column 3" :expand #t :alignment .5 ))) (pack-tv-column treeview column1 renderer1 0) (pack-tv-column treeview column2 renderer2 1) (pack-tv-column treeview column3 renderer3 2) ;; (set-search-column treeview 1) )) (define (ocs/add-model treeview) (let* ((column-types (list <gchararray> <gchararray> <gchararray> <gchararray> <gchararray> <gchararray>)) (model (gtk-list-store-new column-types))) (set-model treeview model) (values model (get-selection treeview)) )) (define (setup-treeview treeview) (add-columns treeview) (receive (model selection) (ocs/add-model treeview) (set-mode selection 'single) (values model selection))) (define (populate-model model) (for-each (lambda (row) (let ((iter (gtk-list-store-append model))) (set-value model iter 0 (car row)) (set-value model iter 1 (cadr row)) (set-value model iter 2 (caddr row)))) '(("r1c1" "r1c2" "r1c3") ("r2c1" "r2c2" "r2c3") ("r3c1" "r3c2" "r3c3")) )) (define (make-simple-popup-menu entries) (let ((menu (make <gtk-menu>))) (for-each (lambda (entry) (if (pair? entry) (let* ((label (car entry)) (callback (cdr entry)) (menu-item (gtk-menu-item-new-with-label label))) (connect menu-item 'activate (lambda (widget) (callback))) (gtk-menu-shell-append menu menu-item) (show menu-item)) (let ((menu-item (gtk-separator-menu-item-new))) (gtk-menu-shell-append menu menu-item) (show menu-item)))) entries) menu)) (define (make-popup-menu) (make-simple-popup-menu `(("popup option 1" . ,(lambda () (display "popup option 1\n"))) ("popup option 2" . ,(lambda () (display "popup option 2\n"))) separator ("popup option 3" . ,(lambda () (display "popup option 3\n")))) )) (define (animate) (let* ((window (make <gtk-window> :type 'toplevel :title "Get path at pos test" )) (treeview (make <gtk-tree-view>)) (popup-menu (make-popup-menu))) (set-default-size window 300 100) (receive (model selection) (setup-treeview treeview) (populate-model model) (add window treeview) (connect window 'delete-event (lambda (widget event) (destroy widget) (gtk-main-quit) #f)) (connect treeview 'button-press-event (lambda (w ev) (case (gdk-event:type ev) ((button-press) (let* ((button (gdk-event-button:button ev)) (time (gdk-event-button:time ev)) (x-pos (inexact->exact (gdk-event-button:x ev))) (y-pos (inexact->exact (gdk-event-button:y ev))) (path-values ;; (get-path-at-pos w x-pos y-pos) (values (list 1) #t 10 10) )) (case button ((3) (receive (indices bool x y) path-values (let* ((row (car indices)) (iter (get-iter model row))) (gtk-menu-popup popup-menu #f ;; parent-menu-shell or #f #f ;; parent-menu-item or #f #f ;; user supplied func to position the menu or #f ;; #f - no more user supplied data to pass to func button time ))))))) ((2button-press) (simple-format #t "ignoring 2button-press events...~%")) ((3button-press) (simple-format #t "ignoring 3button-press events...~%")) ) #f )) ) (show-all window) (gtk-main))) (animate) ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: gtk-menu-popup [guile-gnome2 2.16.1-4] 2010-07-02 3:37 ` David Pirotte @ 2010-07-08 10:51 ` Andy Wingo 0 siblings, 0 replies; 6+ messages in thread From: Andy Wingo @ 2010-07-08 10:51 UTC (permalink / raw) To: David Pirotte; +Cc: guile-user Hi, On Fri 02 Jul 2010 04:37, David Pirotte <david@altosw.be> writes: > ERROR: No applicable method for #<<generic> get-path-at-pos (1)> in call > (get-path-at-pos #<<gtk-tree-view> b6320540> 118 30) Indeed, it seems that gtk-tree-view-get-path-at-pos is not wrapped in guile-gnome-2. For the moment, you will have to use something else; but please file a bug. I might be able to get to this within a couple weeks if you poke me about it. Andy -- http://wingolog.org/ ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2010-07-08 10:51 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-06-28 19:15 gtk-menu-popup [guile-gnome2 2.16.1-4] David Pirotte 2010-06-29 10:04 ` Andy Wingo 2010-06-29 14:42 ` David Pirotte 2010-07-01 10:49 ` Andy Wingo 2010-07-02 3:37 ` David Pirotte 2010-07-08 10:51 ` Andy Wingo
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).