Ejemplo n.º 1
0
int
edit_src(struct tab *t, struct karg *args)
{
	WebKitWebFrame		*frame;
	WebKitWebDataSource	*ds;
	GString			*contents;
	struct edit_src_cb_args	*ext_args;

	if (external_editor == NULL){
		show_oops(t,"Setting external_editor not set");
		return (1);
	}

	frame = webkit_web_view_get_focused_frame(t->wv);
	ds = webkit_web_frame_get_data_source(frame);
	if (webkit_web_data_source_is_loading(ds)) {
		show_oops(t,"Webpage is still loading.");
		return (1);
	}

	contents = webkit_web_data_source_get_data(ds);
	if (!contents)
		show_oops(t,"No contents - opening empty file");

	ext_args = g_malloc(sizeof(struct edit_src_cb_args));
	ext_args->frame = frame;
	ext_args->data_src = ds;

	/* Check every 100 ms if file has changed */
	open_external_editor(t, contents ? contents->str : "", &edit_src_cb,
	    ext_args);
	return (0);
}
Ejemplo n.º 2
0
static gint
luaH_webview_eval_js(lua_State *L)
{
    WebKitWebFrame *frame = NULL;
    widget_t *w = luaH_checkwidget(L, 1);
    WebKitWebView *view = WEBKIT_WEB_VIEW(g_object_get_data(G_OBJECT(w->widget), "webview"));
    const gchar *script = luaL_checkstring(L, 2);
    const gchar *filename = luaL_checkstring(L, 3);

    /* Check if js should be run on currently focused frame */
    if (lua_gettop(L) >= 4) {
        if (lua_islightuserdata(L, 4)) {
            frame = lua_touserdata(L, 4);
        } else if (lua_toboolean(L, 4)) {
            frame = webkit_web_view_get_focused_frame(view);
        }
    }
    /* Fall back on main frame */
    if (!frame)
        frame = webkit_web_view_get_main_frame(WEBKIT_WEB_VIEW(view));

    /* evaluate javascript script and push return result onto lua stack */
    const gchar *result = webview_eval_js(frame, script, filename);
    lua_pushstring(L, result);
    return 1;
}
static gboolean
mail_shell_view_mail_display_needs_key (EMailDisplay *mail_display,
                                        gboolean with_input)
{
	gboolean needs_key = FALSE;

	if (gtk_widget_has_focus (GTK_WIDGET (mail_display))) {
		WebKitWebFrame *frame;
		WebKitDOMDocument *dom;
		WebKitDOMElement *element;
		gchar *name = NULL;

		frame = webkit_web_view_get_focused_frame (WEBKIT_WEB_VIEW (mail_display));
		if (!frame)
			return FALSE;
		dom = webkit_web_frame_get_dom_document (frame);
		element = webkit_dom_html_document_get_active_element (WEBKIT_DOM_HTML_DOCUMENT (dom));

		if (element)
			name = webkit_dom_node_get_node_name (WEBKIT_DOM_NODE (element));

		/* if INPUT or TEXTAREA has focus, then any key press should go there */
		if (name && ((with_input && g_ascii_strcasecmp (name, "INPUT") == 0) || g_ascii_strcasecmp (name, "TEXTAREA") == 0)) {
			needs_key = TRUE;
		}

		g_free (name);
	}

	return needs_key;
}
Ejemplo n.º 4
0
static VALUE
WebView_focused_frame(VALUE self)
{
  VALUE __p_retval = Qnil;
  WebKitWebView *_self = ((WebKitWebView*)RVAL2GOBJ(self));

#line 274 "/home/ngl/Progetti/gtk-webkit-ruby/ext/webkit/webkit.cr"
  do { __p_retval = GOBJ2RVAL(webkit_web_view_get_focused_frame(_self)); goto out; } while(0);
out:
  return __p_retval;
}
Ejemplo n.º 5
0
static gint
luaH_webview_register_function(lua_State *L)
{
    WebKitWebFrame *frame = NULL;
    widget_t *w = luaH_checkwidget(L, 1);
    WebKitWebView *view = WEBKIT_WEB_VIEW(g_object_get_data(G_OBJECT(w->widget), "webview"));
    const gchar *name = luaL_checkstring(L, 2);
    lua_pushvalue(L, 3);
    gpointer ref = luaH_object_ref(L, -1);

    /* Check if function should be registered on currently focused frame */
    if (lua_gettop(L) >= 4 && luaH_checkboolean(L, 4))
        frame = webkit_web_view_get_focused_frame(view);
    /* Fall back on main frame */
    if (!frame)
        frame = webkit_web_view_get_main_frame(WEBKIT_WEB_VIEW(view));

    /* register function */
    webview_register_function(frame, name, ref);
    return 0;
}
static gboolean
mail_shell_view_key_press_event_cb (EMailShellView *mail_shell_view,
                                    GdkEventKey *event)
{
	EShellView *shell_view;
	EShellWindow *shell_window;
	EShellContent *shell_content;
	EMailView *mail_view;
	EMailReader *reader;
	EMailDisplay *mail_display;
	GtkAction *action;

	shell_view = E_SHELL_VIEW (mail_shell_view);
	shell_window = e_shell_view_get_shell_window (shell_view);

	if ((event->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK | GDK_MOD1_MASK)) != 0)
		return FALSE;

	shell_content = e_shell_view_get_shell_content (shell_view);
	mail_view = e_mail_shell_content_get_mail_view (E_MAIL_SHELL_CONTENT (shell_content));
	reader = E_MAIL_READER (mail_view);
	mail_display = e_mail_reader_get_mail_display (reader);

	switch (event->keyval) {
		case GDK_KEY_space:
			action = ACTION (MAIL_SMART_FORWARD);
			break;

		case GDK_KEY_BackSpace:
			action = ACTION (MAIL_SMART_BACKWARD);
			break;

		case GDK_KEY_Home:
		case GDK_KEY_Left:
		case GDK_KEY_Up:
		case GDK_KEY_Right:
		case GDK_KEY_Down:
		case GDK_KEY_Next:
		case GDK_KEY_End:
		case GDK_KEY_Begin:
			/* If Caret mode is enabled don't try to process these keys */
			if (e_web_view_get_caret_mode (E_WEB_VIEW (mail_display)))
				return FALSE;
		case GDK_KEY_Prior:
			if (!mail_shell_view_mail_display_needs_key (mail_display, FALSE) &&
			    webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (mail_display)) !=
			    webkit_web_view_get_focused_frame (WEBKIT_WEB_VIEW (mail_display))) {
				WebKitDOMDocument *document;
				WebKitDOMDOMWindow *window;

				document = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (mail_display));
				window = webkit_dom_document_get_default_view (document);

				/* Workaround WebKit bug for key navigation, when inner IFRAME is focused.
				 * EMailView's inner IFRAMEs have disabled scrolling, but WebKit doesn't post
				 * key navigation events to parent's frame, thus the view doesn't scroll.
				 * This is a poor workaround for this issue, the main frame is focused,
				 * which has scrolling enabled.
				*/
				webkit_dom_dom_window_focus (window);
			}

			return FALSE;
		default:
			return FALSE;
	}

	if (mail_shell_view_mail_display_needs_key (mail_display, TRUE))
		return FALSE;

	gtk_action_activate (action);

	return TRUE;
}