Re: Applet resizing and Mixer applet in CVS HEAD
- From: Tom Gilbert <gilbertt tomgilbert freeserve co uk>
- To: Gnome developer list <gnome-devel-list gnome org>
- Subject: Re: Applet resizing and Mixer applet in CVS HEAD
- Date: Sat, 9 Oct 1999 22:59:14 +0000
Ok. If noone is willing to discuss this, should I file it as a
bug-report?
If so, should it be against the mixer-applet (for not having the
workaround) or against the panel (for not updating all its properties
before emitting signals)?
It is a reporducible bug, I'm not making it up, honest!
* Tom Gilbert (gilbertt@tomgilbert.freeserve.co.uk) wrote:
> Hi folks,
>
> Is anyone else getting strange behaviour with CVS head applet resizing?
>
> I first noticed it when I wrote the screenshooter applet. I wanted my
> applet to show either an hbox or vbox depending on panel orientation
> _and_ size. The trouble is when moving an applet from a BOTTOM
> oriented TINY panel to a RIGHT oriented NORMAL panel. The signals
> recieved by the applet are
> Change Orient
> then
> Change Size
>
> The problem is that if you ask the panel for its size in the Orient
> signal handler, it reports the old size (tiny), then the last signal
> arrives with the correct size _and_ orient.
>
> A futher problem is that if you ask the panel for its size and
> orientation at applet startup, you seem to get the values for the main
> panel. (On my desktop I have a TINY main panel, oriented BOTTOM, and a
> NORMAL secondary panel, oriented RIGHT, if you ask the panel at
> startup what the size and orient are, you get TINY BOTTOM, even if you
> add the applet to the secondary panel - BUG?)
>
> So it boils down to this. On startup, the applet screws up its
> appearance. This is demonstrated by the mixer applet in head, and my
> own screenshooter until I worked around it. The reason it screws up is
> that is gets three requests to change orientation at startup:
>
> 1) Startup Code : Orient = WRONG, Size=WRONG
> 2) Change Orient : Orient = RIGHT, Size=WRONG
> 3) Change Size : Orient = RIGHT, Size=RIGHT
>
> All these signals happen very close together, and I don't think the
> applet gets to gtk_main_iteration inbetween. This screws up
> orientation and appearance. (I can take a screenshot if anyone is
> interested ;-)
>
> The fix is kludgy, but works, I have applied it to screenshooter, and
> the fix for mixer is included below. I actually went a bit further
> than this in my applet, to avoid unecessary refreshes etc, so I wrote
> a function that determines whether a change in orientation is
> necessary, and I have combined both signal handlers (size and
> orientation) into one function. I didn't want to screw too much with
> someone else code here though...
>
> Thanks. (I hope I made sense of that)
>
> Tom.
> --
> .-------------------------------------------------------.
> .^. | Tom Gilbert, England | tom@tomgilbert.freeserve.co.uk |
> /V\ |----------------------| www.tomgilbert.freeserve.co.uk |
> // \\ | Sites I recommend: `--------------------------------|
> /( )\ | www.freshmeat.net www.enlightenment.org www.gnome.org |
> ^^-^^ `-------------------------------------------------------'
> --- mixer.c.old Fri Oct 1 18:45:28 1999
> +++ mixer.c Fri Oct 1 19:10:30 1999
> @@ -541,6 +541,8 @@
>
> mx = gtk_object_get_user_data(GTK_OBJECT(w));
>
> + gtk_widget_hide(w);
> +
> if(md->size == SIZE_TINY) {
> /* hide one box */
> if((ORIENT_UP == md->orient) || (ORIENT_DOWN == md->orient))
> @@ -569,10 +571,7 @@
>
> md->orient = o;
>
> - /* without this, the mixer sometimes draws itself incorrectly
> - if you drag the panel around the screen a lot. */
> - while(gtk_events_pending())
> - gtk_main_iteration();
> + gtk_widget_show(w);
> }
> static void
> applet_change_size(GtkWidget *w, PanelSizeType o)
> @@ -584,7 +583,9 @@
>
> (*md->update_func) (mixerw, mvol);
>
> - mx = gtk_object_get_user_data(GTK_OBJECT(w));
> + mx = gtk_object_get_user_data(GTK_OBJECT(w));
> +
> + gtk_widget_hide(w);
>
> md->size = o;
>
> @@ -606,10 +607,7 @@
> }
> }
>
> - /* without this, the mixer sometimes draws itself incorrectly
> - if you drag the panel around the screen a lot. */
> - while(gtk_events_pending())
> - gtk_main_iteration();
> + gtk_widget_show(w);
> }
>
>
Tom.
--
.-------------------------------------------------------.
.^. | Tom Gilbert, England | tom@tomgilbert.freeserve.co.uk |
/V\ |----------------------| www.tomgilbert.freeserve.co.uk |
// \\ | Sites I recommend: `--------------------------------|
/( )\ | www.freshmeat.net www.enlightenment.org www.gnome.org |
^^-^^ `-------------------------------------------------------'
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]