On Sun, 06 Nov 2005 12:24:56 +0100 dannym <[EMAIL PROTECTED]> wrote: > Hi, > > Am Sonntag, den 06.11.2005, 12:01 +0100 schrieb Mattias Gaertner: > > On Sat, 05 Nov 2005 21:21:27 +0100 > > dannym <[EMAIL PROTECTED]> wrote: > > > > > Hi, > > > > > > Am Samstag, den 05.11.2005, 20:34 +0100 schrieb dannym: > > > > Hi, > > > > > > > > I'm trying to get ShowInTaskbar for gtk2 working. > > > > > > > > I tried to do it as in the attached patch for a quick test. Doesn't > > > > work. > > > > > > > > It has to do with some ridiculously complicated dependency of the > > > > default of ShowInTaskbar on MainForm. Can't get it to work. > > > > > > > > The symptoms after the patch are: > > > > - no form at all is still in the taskbar > > > > > > > > Helpp ? :) > > > > I applied it with a few additions. The MainForm is shown, but under gtk1 > > we have still the problem, that ShowModal hides all forms from the > > 'taskbar', and reshowing does not work. > > Under gtk2 it seems to work. > > > > > > > > (P.S. I suggest getting rid of GetShowInTaskBarDefault's dependency > > > > on MainForm, after all, the programmer can still set it the ~one > > > > time the mainform changes over the lifetime of his project) > > > > > > I tried that, surely enough, that works. I'll stop investigating here, > > > since I think that (just having GetShowInTaskbarDefault return True) > > > is the corrent fix either way. > > ? > > um, to sum it up, earlier the bug was because of, in chronological > order, > > - the application is started > - the form is created > - In the TCustomForm.Create, FShowInTaskBar is set according to what > MainForm points to, which is nil,
I fixed the GetShowInTaskBarDefault to check if MainForm=nil. > hence FShowInTaskBar False > - TCustomForm.Create returns > - the MainForm is set to the form just created, too late > - the Form is Shown > - my modification does thus: > procedure TCustomForm.DoShow; > begin > + HandleNeeded; > + TWSCustomFormClass(WidgetSetClass).SetShowInTaskbar(Self, > FShowInTaskbar); > + > if Assigned(FOnShow) then FOnShow(Self); > end; > which makes it do anything at all with ShowInTaskbar, as opposed to > before. > - *However*, FShowInTaskbar is False since it was set in the > constructor. I feel uneasy changing properties underneath the programmer > without notifying him, so I don't "fix it" within DoShow (i.e. set it to > True when nobody is looking :)) Good. > To fix the whole thing once and for all, have GetShowInTaskBarDefault > return always True and just have the programmer set it to false manually > for the forms he wants. > > > [Note that that is better either way, because the programmer has to > bring the windows that aren't shown in the taskbar to the front > programmatically - since the user can't do it Sure he could. Many wm brings a clicked window to the front. > - (for example in reaction > to activating the mainform). At least then it's obvious since he also > has to set ShowInTaskBar to False himself, so he asked for it, he got > it ...] > > > As a side note: > > Note also that in order to change the showintaskbar property, the form > has to be [hidden and] reshown as per EWMH standard > http://standards.freedesktop.org/wm-spec/wm-spec-1.4.html , search for > "The Window Manager SHOULD honor _NET_WM_STATE whenever a withdrawn > window requests to be mapped.". > > That is, the window has to be hidden, the flag set, and the window shown > again (when it was visible yet in the first place, that is). Ah I see. So we have two possibilities for gtk1: a) Find out, how to make Show modal to not hide the mainform form the taskbar b) Hide/Show all windows on Show Modal - unpleasant I don't want to invest much time in the gtk1 interface. I'm currently working on the IDE and the LCL and after one of the next releases will switch to gtk2. > i.e. > SetShowInTaskBar: > OldVisible := Visible; > if OldVisible then Hide; > FShowInTaskbar := Value; > gtk_window_set_skip_taskbar(... , not FShowInTaskbar); > if OldVisible then Show; Mattias _________________________________________________________________ To unsubscribe: mail [EMAIL PROTECTED] with "unsubscribe" as the Subject archives at http://www.lazarus.freepascal.org/mailarchives