Working on a simple desktop app that displays canvas based graphics in some of the tabs and html pages in others. Things work great until I add an htmlview gadget to one of the tabber gadget's tabs. Extra Mousewheel events start cropping up and the htmlview gadget tends not to give up the focus. Here's some sample code that reproduces the effect:
At initial startup, I get three mousewheel events when moving the mouse wheel, one from panel2 and two from window. If I click on the Rectangle tab I get just one mousewheel event from window. When I select the HTMLview tab, I still only get one mousewheel event (from window) until I click within the web page (giving it focus I suppose). Lastly, if I return to either one of the other tabs, my mousewheel events are still going to the htmlview gadget.
So, how do I stop this effect and only get one mousewheel event?
I've tried hidegadget on the parent panel, the htmlview gadget and both as well as freegadget on both without success. I'm stumped - is this how the htmlview gadget is supposed to work?
; Moving the mousewheel ; should only generate one event from window ; ; on initial run (when showing the Time tab) generates: ; one event from panel2 (HTMLVew gadget) and ; two events from window (one too many) ; ; selecting the Rectangle tab temporaraly fixes this and generates: ; one event from window ; ; selecting the HTMLView tab generates: ; one event from window (as long as the web page has not been clicked on -- given focus) ; no event from window if the window can scroll ; one event from window if the window can't scroll ; ; after moving from the HTMLview window, the mousewheel still acts as though the HTMLview is the focus ; window = createwindow("HTMLView gadget bug", 40,40,800,600) tabber = createtabber(0,0,600,400,window) addgadgetitem tabber,"Time" addgadgetitem tabber,"Rectangle" addgadgetitem tabber,"HTMLView" panel0 = createpanel(0,0,600,400,tabber) canvas0 = createcanvas(0,0,600,400,panel0) panel1 = createpanel(0,0,600,400,tabber) canvas1 = createcanvas(0,0,600,400,panel1) hidegadget panel1 panel2 = createpanel(0,0,600,400,tabber) html2 = createhtmlview(0,0,600,400,panel2) htmlviewgo html2,"www.blitzbasic.com" hidegadget panel2 starttime = millisecs() setbuffer canvasbuffer(canvas1) color 128,100,100 rect 20,20,50,50,True fps = CreateTimer (60) Repeat Repeat ; Event processing loop (repeats until 'fps' timer event occurs)... event = WaitEvent () ; Wait for any event or the FPS timer to 'tick' if event=516 then DebugLog "Event,EventData,EventSource,EventX,EventY["+event+","+EventData()+","+EventSource()+","+EventX()+","+EventY()+"]" Select event Case $803 ; close window End Case $204 ; MouseWheel moved debuglog "Mousewheel detected: ["+eventdata()+"]" case $401 ; gadget action (including clicking on a tab) select eventsource() case tabber select eventdata() ; which tab case 0 hidegadget panel1 hidegadget panel2 showgadget panel0 case 1 hidegadget panel0 hidegadget panel2 showgadget panel1 case 2 hidegadget panel0 hidegadget panel1 showgadget panel2 end select end select End Select Until event = $4001 ; only render on a timer tick to limit redraw to fps framerate setbuffer canvasbuffer (canvas0) cls color 128,128,128 text 100,100,"Seconds since start: ["+str$(int((millisecs()-starttime)/1000))+"]" flipcanvas canvas0 flipcanvas canvas1 forever End
At initial startup, I get three mousewheel events when moving the mouse wheel, one from panel2 and two from window. If I click on the Rectangle tab I get just one mousewheel event from window. When I select the HTMLview tab, I still only get one mousewheel event (from window) until I click within the web page (giving it focus I suppose). Lastly, if I return to either one of the other tabs, my mousewheel events are still going to the htmlview gadget.
So, how do I stop this effect and only get one mousewheel event?
I've tried hidegadget on the parent panel, the htmlview gadget and both as well as freegadget on both without success. I'm stumped - is this how the htmlview gadget is supposed to work?