Re: Help with closing a notebook page (GTK2)



On 4 July 2011 15:02, walter tallent <w41t3r yahoo com> wrote:
Hi.
I know I'm coming late to this party, but if you're packing the button Âinto the
tab, it's a child of that notebook page. ÂCan't you retrieve Âthe page you're on
by simply calling gtk_notebook_page_num () with the Âbutton passed in as the
child during the button's clicked signal Âhandler? ÂThen you pass the returned
page number to Âgtk_notebook_remove_page (). ÂThis way you'll always remove the
correct Âpage, and it doesn't matter if the user brings that page to the front
first or not.

Or is there something I've overlooked?
walter



________________________________
From: Bill C <billc netspace net au>
To: gtk-app-devel-list gnome org
Sent: Sun, July 3, 2011 3:54:13 PM
Subject: Re: Help with closing a notebook page (GTK2)

On 04/07/11 06:26, Neil Munro wrote:
On 3 July 2011 19:31, Thomas ÂBollmeier<TBollmeier web de> Âwrote:
----UrsprÃngliche Nachricht-----
Von: "Neil Munro"<neilmunro gmail com>
Gesendet: 02.07.2011 23:40:02
An: gtk-app-devel-list gnome org
Betreff: Help with closing a notebook page (GTK2)

Hi, I have used pygtk before so I am familiar with some of the basic
concepts of gtk, but this is my first attempt with an actual gtk+ C
application and I have run into a few issues.

I have a notebook that I wish to have a close button on the page tabs
that when clicked closes the tabs.

I know that it's a bit off a faf to do as you don't know the page
prior to the event. So you have to dynamically detect which tab is
being closed by using a tab child widget.

Now I believe I have done this in code, except it always returns -1
which then firmly tells me I have done something wrong.

I have attached the code for your reference in the hopes that someone
shall be able to point out my no doubt simple mistake.

Many thanks in advance,
Neil Munro
I faced a similar problem when I wrote an editor for the first version of my
gobjectcreator tool some time ago. It was
implemented in PyGTK - nevertheless it should work in C as well. The solution
may not be elegant but it
worked:
I registered a handler for the "clicked"-signal of the close button within the
tab label widget (a GtkHBox).
Within the handler implementation I looped over all pages of the notebook and
checked whether the button instance
in the page label was identical to the sender instance of the "clicked"-signal.
If yes then I had to remove the
corresponding page.
You can find the code example here:

https://github.com/ThomasBollmeier/GObjectCreator/blob/master/gobject_creator/ui/documents_view.py
y

(see lines 342ff. and 378ff. respectively)

Hope that helps.

Regards,
Thomas



___________________________________________________________
Schon gehÃrt? WEB.DE hat einen genialen Phishing-Filter in die
Toolbar eingebaut! http://produkte.web.de/go/toolbar

Thanks to this and Bills suggestion the correct page closes, but I
need to determine a way to re-calculate the page as soon as a tab is
closed, am sure I will figure something out, but thanks for the
patience and help!
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
Hi Neil

Yes the page numbers can change when a page is closed, so you cant use
original page numbers directly to switch pages.

I think I redesigned so that I did not use page numbers. Let the user
switch pages and process the page the user is working with. ÂEnsure the
user cant delete pages that are prior to a page you want to reference
directly. ÂAs Thomas said... ÂNot totally elegant.

Rgds Bill
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list


Well I have a method to correctly get the tab page, it might not be
the best way but it's what came naturally to me, I am having issues
with the memory management. Now I understand the principle of linked
lists/memory management etc but I have only previously created small
test programs, nothing inside a real program, so am having trouble
applying theory to practical.

Below is the function I am writing, I am aware I am not freeing any
memory yet, but some tabs wont close even after I have supposedly
adjusted the linked list, so I am at a loss as to how I am to make
this work, any help would be appreciated!

static void Close( GtkWidget *widget, struct data *tmp )
{
        // Re-configure linked list to reflect new tab positions
        struct node *ptr = head;
        struct node *prev = ptr;

        g_print( "Old list!\n\n" );     

        ptr = head;

        while( ptr->Next != NULL )
        {
                if( ptr == tmp->Ptr )
                {
                        g_print( "Ptr->Page to remove: %d\n", ptr->Page );
                        // Close page
                        gtk_notebook_remove_page( GTK_NOTEBOOK( tmp->Notebook ), tmp->Page );
                        g_print( "Removing node... " );
                        prev = ptr->Prev;
                        ptr = ptr->Next;
                        prev->Next = ptr;
                        ptr->Prev = prev;
                        g_print( "Done!\n" );
                }

                else
                        ptr = ptr->Next;
        }       

        ptr = head;
        gint i = 0;
        
        //while( ptr->Next != NULL )
        for( i = 0; i < gtk_notebook_get_n_pages( tmp->Notebook ); i++ )
        {
                g_print( "Page was: %d\n", ptr->Page );
                ptr->Page = i;
                g_print( "Page is: %d\n", ptr->Page );
                ptr = ptr->Next;
        }
}

If you need more of the code you can check out git://gitorious.org/x2/x2.git

I am also looking at the examples people have given me, but it's slow
going to understand other people's code.

Thanks,
Neil Munro



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]