Page 1 of 1

WebGadget does not recognize "mouse-target-changed" signal

Posted: Sat Nov 28, 2015 10:06 pm
by fsw
[WARNING] GLib-GObject (WARNING): gsignal.c:2516: signal 'mouse-target-changed' is invalid for instance '0x2426250' of type 'WebKitWebView'
However this signal is used inside this code: https://github.com/vain/lariza/blob/master/browser.c
...and it can be compiled without any problems.

Here some "quick-and-dirty" code to test:

Code: Select all

EnableExplicit

ImportC "-lgobject-2.0"
  g_signal_connect_data(*Instance, Signal.P-UTF8, *Callback, *UserData, *ClosureNotify, ConnectFlags.I)
EndImport

ImportC "-lwebkitgtk-1.0"
  webkit_web_navigation_action_get_original_uri(*NavigationAction)
  webkit_web_policy_decision_ignore(*PolicyDecision)
  webkit_web_policy_decision_use(*PolicyDecision)
EndImport

Enumeration
  #WEBKIT_NAVIGATION_RESPONSE_ACCEPT
  #WEBKIT_NAVIGATION_RESPONSE_IGNORE
EndEnumeration

ProcedureC WebGadgetCallback(*WebView, *Frame, *Request, *NavigationAction, *PolicyDecision, UserData)
  If PeekS(webkit_web_navigation_action_get_original_uri(*NavigationAction), -1, #PB_UTF8) = "http://www.purebasic.com/news.php"
    MessageRequester("", "No news today!")
    webkit_web_policy_decision_ignore(*PolicyDecision)
  Else
    webkit_web_policy_decision_use(*PolicyDecision)
  EndIf
EndProcedure

ProcedureC button_press_event(*WebView, *Frame, *Request, *NavigationAction, *PolicyDecision, UserData)
  Debug "button-press-event"
EndProcedure

ProcedureC mouse_target_changed(*WebView, *Frame, *Request, *NavigationAction, *PolicyDecision, UserData)
  Debug "mouse-target-changed"
EndProcedure


If OpenWindow(0, 200, 100, 600, 300, "WebGadget")

  WebGadget(0, 10, 10, 580, 280, "http://johndyer.name/lab/fullscreenapi")
  ;WebGadget(0, 10, 10, 580, 280, "http://www.purebasic.com")
 
  g_signal_connect_data(GadgetID(0), "navigation-policy-decision-requested", @WebGadgetCallback(), 0, 0, 0)
  g_signal_connect_data(GadgetID(0), "button-press-event",@button_press_event(),0,0,0)
  g_signal_connect_data(GadgetID(0), "mouse-target-changed", @mouse_target_changed(), 0,0,0);
  
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
The "button-press-event" works but the "mouse-target-changed" does not.

EDIT:
Didn't test this on Windows or OSX.

Re: WebGadget does not recognize "mouse-target-changed" sign

Posted: Sun Nov 29, 2015 10:12 pm
by Shardik
fsw wrote:The "button-press-event" works but the "mouse-target-changed" does not.
The "mouse-target-changed" can't work because you are using the old WebKitGTK which doesn't support this signal in its WebKitWebView (take a look into the section "Signals") whereas the current WebKit2GTK supports this signal in its WebKitWebView... :wink:

Therefore I installed WebKit2GTK in my Ubuntu 14.04 x64 with KDE using

Code: Select all

> sudo apt-get install libwebkit2gtk-3.0-dev
and changed your code to import libwebkit2gtk3 and tried to run it with both Gtk3 and subsystem "gtk2":

Code: Select all

EnableExplicit

ImportC "-lgobject-2.0"
  g_signal_connect_data(*Instance, Signal.P-UTF8, *Callback, *UserData, *ClosureNotify, ConnectFlags.I)
EndImport

ImportC "-lwebkit2gtk-3.0"
  webkit_web_policy_decision_ignore(*PolicyDecision)
  webkit_web_policy_decision_use(*PolicyDecision)
EndImport

ProcedureC button_press_event(*WebView, *Frame, *Request, *NavigationAction, *PolicyDecision, UserData)
  Debug "button-press-event"
EndProcedure

ProcedureC mouse_target_changed(*WebView, *Frame, *Request, *NavigationAction, *PolicyDecision, UserData)
  Debug "mouse-target-changed"
EndProcedure

If OpenWindow(0, 200, 100, 600, 300, "WebGadget")
  WebGadget(0, 10, 10, 580, 280, "http://johndyer.name/lab/fullscreenapi")
 
  g_signal_connect_data(GadgetID(0), "button-press-event",@button_press_event(),0,0,0)
  g_signal_connect_data(GadgetID(0), "mouse-target-changed", @mouse_target_changed(), 0,0,0);
 
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
But unfortunately your reported error remains because PureBasic's WebGadget seems to utilize the old WebKitGTK... :?