summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndré Auzi <aauzi@free.fr>2014-01-25 00:04:05 +0100
committerAndré Auzi <aauzi@free.fr>2014-01-25 00:04:05 +0100
commitd94ebfc020c02e3314d5d6795128b010ab0cb9fb (patch)
tree466a5d08a54bea6a1b92b852b397d60e76f55be5
parent7f0e57b539065f6f4c1c8ba159cd846528a7c7b1 (diff)
parentb62a32b5474d0446320fe675d02086bab1462e5a (diff)
downloadmidori-d94ebfc020c02e3314d5d6795128b010ab0cb9fb.tar.gz
merge lp:midori
-rw-r--r--.bzrignore1
-rw-r--r--CMakeLists.txt96
-rw-r--r--ChangeLog122
-rw-r--r--GNUmakefile.in27
-rw-r--r--HACKING45
-rw-r--r--README4
-rw-r--r--cmake/ContainTest.cmake23
-rw-r--r--cmake/FindVala.cmake6
-rw-r--r--config/CMakeLists.txt6
-rwxr-xr-xconfigure220
-rw-r--r--data/CMakeLists.txt34
-rw-r--r--data/bookmarks/Create.sql91
-rw-r--r--data/bookmarks/Import_old_db_bookmarks.sql6
-rw-r--r--data/error.html2
-rw-r--r--data/faq.html118
-rw-r--r--data/flummi/Create.sql6
-rw-r--r--data/gtk3.css1
-rw-r--r--data/midori.appdata.xml.in14
-rw-r--r--data/tabby/Update1.sql4
-rw-r--r--docs/api/wscript_build38
-rw-r--r--extensions/adblock.c20
-rw-r--r--extensions/colorful-tabs.c92
-rw-r--r--extensions/cookie-permissions/cookie-permission-manager-preferences-window.c106
-rw-r--r--extensions/cookie-permissions/cookie-permission-manager.c73
-rw-r--r--extensions/cookie-permissions/cookie-permission-manager.h4
-rw-r--r--extensions/cookie-permissions/main.c4
-rw-r--r--extensions/delayed-load.vala137
-rw-r--r--extensions/devpet.vala38
-rw-r--r--extensions/feed-panel/feed-panel.c1
-rw-r--r--extensions/flummi.vala94
-rw-r--r--extensions/formhistory/formhistory.c6
-rw-r--r--extensions/history-list.vala13
-rw-r--r--extensions/mouse-gestures.c2
-rw-r--r--extensions/statusbar-features.c2
-rw-r--r--extensions/tabby.vala445
-rw-r--r--extensions/transfers.vala45
-rw-r--r--extensions/wscript_build62
-rw-r--r--icons/wscript_build44
-rw-r--r--katze/katze-array.c2
-rw-r--r--katze/katze-cellrenderercomboboxtext.c28
-rw-r--r--katze/katze-preferences.c18
-rw-r--r--katze/katze-throbber.c932
-rw-r--r--katze/katze-throbber.h94
-rw-r--r--katze/katze-utils.c12
-rw-r--r--katze/katze.h1
-rw-r--r--katze/katze.vapi2
-rw-r--r--katze/midori-paths.vala14
-rw-r--r--katze/midori-uri.vala19
-rw-r--r--midori/main.c2
-rw-r--r--midori/midori-app.c11
-rw-r--r--midori/midori-bookmarks-db.c507
-rw-r--r--midori/midori-bookmarksdatabase.vala101
-rw-r--r--midori/midori-browser.c879
-rw-r--r--midori/midori-database.vala136
-rw-r--r--midori/midori-dialog.vala2
-rw-r--r--midori/midori-download.vala47
-rw-r--r--midori/midori-extension.c13
-rw-r--r--midori/midori-frontend.c15
-rw-r--r--midori/midori-history.c32
-rw-r--r--midori/midori-historydatabase.vala111
-rw-r--r--midori/midori-locationaction.c18
-rw-r--r--midori/midori-notebook.vala526
-rw-r--r--midori/midori-panel.c4
-rw-r--r--midori/midori-preferences.c11
-rw-r--r--midori/midori-privatedata.c1
-rw-r--r--midori/midori-searchaction.c4
-rw-r--r--midori/midori-session.c2
-rw-r--r--midori/midori-settings.vala1
-rw-r--r--midori/midori-speeddial.vala13
-rw-r--r--midori/midori-tab.vala28
-rw-r--r--midori/midori-view.c654
-rw-r--r--midori/midori-view.h3
-rw-r--r--midori/midori-websettings.c54
-rw-r--r--midori/midori.vapi8
-rw-r--r--midori/sokoke.c13
-rw-r--r--midori/wscript_build58
-rw-r--r--panels/midori-bookmarks.c4
-rw-r--r--panels/midori-history.c1
-rw-r--r--po/CMakeLists.txt16
-rw-r--r--po/POTFILES.in4
-rw-r--r--po/ar.po84
-rw-r--r--po/ast.po4
-rw-r--r--po/be.po4
-rw-r--r--po/bg.po4
-rw-r--r--po/bs.po4
-rw-r--r--po/ca.po466
-rw-r--r--po/cs.po4
-rw-r--r--po/cy.po4
-rw-r--r--po/da.po4
-rw-r--r--po/de.po12
-rw-r--r--po/el.po4
-rw-r--r--po/en_AU.po4
-rw-r--r--po/en_CA.po4
-rw-r--r--po/en_GB.po4
-rw-r--r--po/eo.po4
-rw-r--r--po/es.po15
-rw-r--r--po/et.po4
-rw-r--r--po/eu.po4
-rw-r--r--po/fa.po4
-rw-r--r--po/fi.po4
-rw-r--r--po/fr.po4
-rw-r--r--po/gd.po8
-rw-r--r--po/gl.po4
-rw-r--r--po/he.po4
-rw-r--r--po/hr.po86
-rw-r--r--po/hu.po150
-rw-r--r--po/ia.po4
-rw-r--r--po/id.po9
-rw-r--r--po/it.po7
-rw-r--r--po/ja.po99
-rw-r--r--po/kk.po4
-rw-r--r--po/ko.po4
-rw-r--r--po/ky.po4
-rw-r--r--po/lt.po4
-rw-r--r--po/lv.po15
-rw-r--r--po/ml.po44
-rw-r--r--po/ms.po4
-rw-r--r--po/nb.po35
-rw-r--r--po/nl.po4
-rw-r--r--po/nn.po4
-rw-r--r--po/no.po4
-rw-r--r--po/pa.po4
-rw-r--r--po/pl.po4
-rw-r--r--po/pt.po4
-rw-r--r--po/pt_BR.po13
-rw-r--r--po/ro.po4
-rw-r--r--po/ru.po19
-rw-r--r--po/sk.po75
-rw-r--r--po/sl.po4
-rw-r--r--po/sr.po4
-rw-r--r--po/sr@latin.po4
-rw-r--r--po/sv.po36
-rw-r--r--po/th.po4
-rw-r--r--po/tr.po12
-rw-r--r--po/ug.po4
-rw-r--r--po/uk.po7
-rw-r--r--po/vi.po4
-rw-r--r--po/zh_CN.po8
-rw-r--r--po/zh_TW.po32
-rw-r--r--tests/CMakeLists.txt64
-rw-r--r--tests/app.vala116
-rw-r--r--tests/browser.c2
-rw-r--r--tests/completion.vala56
-rw-r--r--tests/extensions.c1
-rwxr-xr-xtests/license.sh2
-rwxr-xr-xtests/potfiles.sh2
-rw-r--r--tests/speeddial.vala32
-rw-r--r--tests/tab.vala43
-rw-r--r--tests/wscript_build59
-rwxr-xr-xtools/midori-dev2
-rwxr-xr-xtools/release5
-rwxr-xr-xwafbin92452 -> 0 bytes
-rwxr-xr-xwin32/makedist/makedist.midori81
-rw-r--r--win32/makedist/midori.nsi216
-rwxr-xr-xwin32/makedist/win32-release36
-rw-r--r--win32/old/README_OPENSUSE_MINGW.txt (renamed from win32/README_OPENSUSE_MINGW.txt)0
-rwxr-xr-xwin32/old/x86-mingw32-opensuse/crossconfig.sh (renamed from win32/x86-mingw32-opensuse/crossconfig.sh)0
-rwxr-xr-xwin32/old/x86-mingw32-opensuse/install.sh (renamed from win32/x86-mingw32-opensuse/install.sh)0
-rw-r--r--win32/old/x86-mingw32-opensuse/packages.list (renamed from win32/x86-mingw32-opensuse/packages.list)0
-rw-r--r--wscript674
160 files changed, 3732 insertions, 5496 deletions
diff --git a/.bzrignore b/.bzrignore
index aacd08ec..c2f23a30 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -11,3 +11,4 @@ po/stamp-it
po/*.gmo
packages.version
+GNUmakefile
diff --git a/CMakeLists.txt b/CMakeLists.txt
index cfad7e38..6d8de304 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,11 +2,16 @@
cmake_minimum_required(VERSION 2.6)
cmake_policy(VERSION 2.6)
+# Work-around a bug in the included FindGettext fixed with 2.8.8
+# See http://www.cmake.org/pipermail/cmake-commits/2012-February/012117.html
+if ("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}" VERSION_LESS "2.8.8")
+ cmake_policy(SET CMP0002 OLD)
+endif ()
project(midori C)
add_definitions("-DPACKAGE_NAME=\"${CMAKE_PROJECT_NAME}\"")
add_definitions("-DPACKAGE_BUGREPORT=\"https://bugs.launchpad.net/midori\"")
-set(VERSION 0.5.5)
+set(VERSION 0.5.7)
add_definitions("-DMIDORI_VERSION_SUFFIX=\"${VERSION}\"")
string(REPLACE "." ";" VERSION_LIST ${VERSION})
@@ -23,6 +28,9 @@ execute_process(COMMAND "bzr" "revno"
OUTPUT_STRIP_TRAILING_WHITESPACE)
if (REVISION)
set(VERSION "${VERSION}~r${REVISION}")
+ # All warnings are errors in development builds
+ set(VALAFLAGS ${VALAFLAGS} --fatal-warnings)
+ set(CFLAGS "${CFLAGS}")
endif ()
add_definitions("-DPACKAGE_VERSION=\"${VERSION}\"")
@@ -30,6 +38,13 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
# Disallow building during install to avoid permission problems
set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY 1)
+find_package(Vala REQUIRED)
+vala_require("0.16.0")
+set(VALAFLAGS ${VALAFLAGS}
+ --enable-deprecated
+ --debug
+ )
+
include(GNUInstallDirs)
set(DATADIR ${CMAKE_INSTALL_FULL_DATADIR})
add_definitions("-DMDATADIR=\"${DATADIR}\"")
@@ -115,8 +130,12 @@ if (${DEPS_libsoup-gnome-2.4_VERSION} VERSION_GREATER "2.37.1")
add_definitions("-DHAVE_LIBSOUP_2_37_1")
endif ()
if (${DEPS_libsoup-gnome-2.4_VERSION} VERSION_GREATER "2.40.0")
- add_definitions("-DHAVE_LIBSOUP_2_40_0")
- set(VALAFLAGS ${VALAFLAGS} -D HAVE_LIBSOUP_2_40_0)
+ # valac 0.16 didn't have the bindings yet
+ # For consistency we need to ensure C code makes the same assumptions
+ if (${VALA_VERSION} VERSION_GREATER "0.17.0")
+ add_definitions("-DHAVE_LIBSOUP_2_40_0")
+ set(VALAFLAGS ${VALAFLAGS} -D HAVE_LIBSOUP_2_40_0)
+ endif ()
endif ()
if (WIN32)
@@ -135,12 +154,14 @@ option(HALF_BRO_INCOM_WEBKIT2 "Serve as a guniea pig" OFF)
option(USE_ZEITGEIST "Zeitgeist history integration" ON)
option(USE_GRANITE "Fancy notebook and pop-overs" OFF)
option(USE_APIDOCS "API documentation" OFF)
+option(EXTRA_WARNINGS "Additional compiler warnings" OFF)
-if (USE_GRANITE)
- if (NOT USE_GTK3 AND NOT HALF_BRO_INCOM_WEBKIT2)
- set(USE_GTK3 ON)
- endif ()
+# GTK+3 is implied here, whether set or not
+if (USE_GRANITE OR HALF_BRO_INCOM_WEBKIT2)
+ set(USE_GTK3 ON)
+endif ()
+if (USE_GRANITE)
pkg_check_modules(GRANITE granite>=0.2)
set(OPTS_INCLUDE_DIRS "${OPTS_INCLUDE_DIRS};${GRANITE_INCLUDE_DIRS}")
set(OPTS_LIBRARIES "${OPTS_LIBRARIES};${GRANITE_LIBRARIES}")
@@ -160,7 +181,7 @@ if (USE_ZEITGEIST)
set(PKGS ${PKGS} zeitgeist-1.0)
endif()
-if (USE_GTK3 OR HALF_BRO_INCOM_WEBKIT2)
+if (USE_GTK3)
pkg_check_modules(GCR gcr-3>=2.32)
if (GCR_VERSION)
set(OPTS_INCLUDE_DIRS "${OPTS_INCLUDE_DIRS};${GCR_INCLUDE_DIRS}")
@@ -175,35 +196,35 @@ else ()
add_definitions("-DGCR_VERSION=\"No\"")
endif ()
-if (USE_GTK3)
+if (HALF_BRO_INCOM_WEBKIT2)
+ # Note: WebKitGTK+ 2.0.0 matches 1.11.91; 1.11.92 > 2.0.0
pkg_check_modules(DEPS_GTK REQUIRED
gtk+-3.0>=3.0.0
- webkitgtk-3.0>=1.8.3
+ webkit2gtk-3.0>=1.11.91
javascriptcoregtk-3.0
)
+ add_definitions("-DHAVE_WEBKIT2")
add_definitions("-DGTK_VERSION=\"${DEPS_GTK_gtk+-3.0_VERSION}\"")
- add_definitions("-DWEBKIT_VERSION=\"${DEPS_GTK_webkitgtk-3.0_VERSION}\"")
+ add_definitions("-DWEBKIT_VERSION=\"${DEPS_GTK_webkit2gtk-3.0_VERSION}\"")
set(PKGS ${PKGS} gtk+-3.0)
- set(EXTRA_VAPIS ${EXTRA_VAPIS} "${CMAKE_SOURCE_DIR}/midori/webkitgtk-3.0.vapi")
+ set(EXTRA_VAPIS ${EXTRA_VAPIS} "${CMAKE_SOURCE_DIR}/midori/webkit2gtk-3.0.vapi")
set(VALAFLAGS ${VALAFLAGS} -D HAVE_GTK3)
-elseif (HALF_BRO_INCOM_WEBKIT2)
- # Note: WebKitGTK+ 2.0.0 matches 1.11.91; 1.11.92 > 2.0.0
+ set(VALAFLAGS ${VALAFLAGS} -D HAVE_WEBKIT2)
+elseif (USE_GTK3)
pkg_check_modules(DEPS_GTK REQUIRED
gtk+-3.0>=3.0.0
- webkit2gtk-3.0>=1.11.91
+ webkitgtk-3.0>=1.8.1
javascriptcoregtk-3.0
)
- add_definitions("-DHAVE_WEBKIT2")
add_definitions("-DGTK_VERSION=\"${DEPS_GTK_gtk+-3.0_VERSION}\"")
- add_definitions("-DWEBKIT_VERSION=\"${DEPS_GTK_webkit2gtk-3.0_VERSION}\"")
+ add_definitions("-DWEBKIT_VERSION=\"${DEPS_GTK_webkitgtk-3.0_VERSION}\"")
set(PKGS ${PKGS} gtk+-3.0)
- set(EXTRA_VAPIS ${EXTRA_VAPIS} "${CMAKE_SOURCE_DIR}/midori/webkit2gtk-3.0.vapi")
+ set(EXTRA_VAPIS ${EXTRA_VAPIS} "${CMAKE_SOURCE_DIR}/midori/webkitgtk-3.0.vapi")
set(VALAFLAGS ${VALAFLAGS} -D HAVE_GTK3)
- set(VALAFLAGS ${VALAFLAGS} -D HAVE_WEBKIT2)
else ()
pkg_check_modules(DEPS_GTK REQUIRED
gtk+-2.0>=2.24.0
- webkit-1.0>=1.8.3
+ webkit-1.0>=1.8.1
javascriptcoregtk-1.0
)
add_definitions("-DGTK_VERSION=\"${DEPS_GTK_gtk+-2.0_VERSION}\"")
@@ -212,19 +233,36 @@ else ()
set(EXTRA_VAPIS ${EXTRA_VAPIS} "${CMAKE_SOURCE_DIR}/midori/webkitgtk-3.0.vapi")
endif ()
-find_package(Vala REQUIRED)
-vala_require("0.16.0")
-set(VALAFLAGS ${VALAFLAGS}
- --enable-deprecated
- --debug
- )
-
# dh_translations detects this if there's no variable used
set (GETTEXT_PACKAGE "midori")
add_definitions("-DGETTEXT_PACKAGE=\"${GETTEXT_PACKAGE}\"")
-set(CFLAGS "-Wall -Wundef -Wno-deprecated-declarations -g")
-set(VALA_CFLAGS "-w -g")
+set(CFLAGS "${CFLAGS} -Wall -Wundef -Wno-deprecated-declarations -g")
+
+if (EXTRA_WARNINGS)
+ LIST(APPEND EXTRA_CFLAGS_LIST
+ -Wextra
+ -Wno-unused-parameter
+ -Wno-missing-field-initializers
+ -Wno-comment
+ -Waggregate-return
+ -Wredundant-decls
+ -Wshadow -Wpointer-arith -Wcast-align
+ -Winline -Wformat-security -fno-common
+ -Winit-self -Wundef
+ -Wnested-externs
+ )
+ string(REPLACE ";" " " EXTRA_CFLAGS "${EXTRA_CFLAGS_LIST}")
+ set(CFLAGS "${CFLAGS} ${EXTRA_CFLAGS}")
+else ()
+ if (REVISION)
+ set(CFLAGS "${CFLAGS} -Werror")
+ endif()
+endif ()
+
+# Explicitly add -fPIC for older toolchains
+set(VALA_CFLAGS "-w -g -fPIC")
+
set(LIBMIDORI "${CMAKE_PROJECT_NAME}-core")
# CMake provides no uninstall target by design
diff --git a/ChangeLog b/ChangeLog
index e065c3df..9deb09d6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,127 @@
This file is licensed under the terms of the expat license, see the file EXPAT.
+v0.5.7:
+ Modify actions and internal items in browser without changing settings
+ Delay tab loading after Midori crashed
+ Uncomment failing assertions about view_source in tab test
+ Fallback to about:home if startup is anything but blank
+ Don't try to create formhistory database if config_dir is NULL
+ Handle url arguments for blank sessions
+ Execute commands given at start time
+ Introduce high-level prepare/ DatabaseStatement API
+ Drop unused GraniteClutter-based animation support
+ Drop uncommented contractor support
+ Drop deprecated StaticNotebook used in KatzePreferences
+ Introduce notebook class converging separate implementations
+ Work around symbol relocation issue old version of gcc present on Ubuntu LTS
+ NULL-check treeview in midori_search_action_get_editor
+ Adjust CMakeList .ico check to not skip nojs icons
+ Enable sidepanel in private mode
+ Move Preferences menu entry above About
+ Set minimum value of 0 on spin button for maximum cache size
+ Give NextForward its own label for toolbar editor
+ Correctly disable favicon database in app and private mode
+ Change preferences to refer to proxy address as a "URI" (not "hostname")
+ Add close tabs to right feature
+ Allow printing without confirmation dialog on kiosk setups
+
+v0.5.6:
+ instead of creating devpet status icon on extension load, create it only to show new messages
+ Open speed dial or homepage according to preference
+ handle tab duplication
+ Add copyright note to appdata file
+ Tweak searching for resources when running from build folder
+ Swap NULL-check with main frame check
+ Use correct signal when clearing the trash
+ Hide WEbGL preference if it is unavailable
+ Remove stored popup sessions from the database
+ Check all browsers for opened sessions and whether they're popups
+ removed unused preference dialog and related code
+ Fix check for found valac and mention VALAC variable
+ Fix autoscrolling if page contains a frame with our custom error page
+ Don't use context-menu signal in WebKitGTK+ < 1.10.0
+ Fix building on Ubuntu 12.04
+ Reset item ids when re-importing bookmarks
+ Check path being NULL in export before trying to inspect it
+ restore the last closed sessions if no session is opened
+ Cast WebKitDOMHtmlElement for getting source content
+ Use font-set signal and font family for GTK+ 3.2 font chooser
+ add function to view dom source
+ remove unused variable
+ Resolve compiler warnings in current trunk
+ Update win32-release script for cmake, move unused docs/scripts to old folder
+ Try to handle previous runs of cmake in configure wrapper
+ Correct view source assertions in tab unit test
+ Build fix: found undeclared in midori_bookmarks_db_remove_item_recursive
+ Cache bookmark items to avoid their recreation on database reads
+ allow "view source" on about pages
+ Enable old target policy on cmake < 2.8.8
+ Re-arrange data file installing to be more explicit
+ option to modify the number of tabs which will be restored in each idle callback
+ Implement MidoriBookmarksDatabase class by inheritence from MidoriDatabase
+ Ensure tab spinners update as often as the menubar spinner to avoid desync
+ Use tabby sorting increment when importing session.xbel tabs
+ Only install config files to /etc if prefix equals /usr
+ handle urls as argument when starting midori
+ Make tabby compile with Webkit2
+ Drop waf build system and provide cmake-based "configure" script
+ midori_panel_action_activate_cb forgot to update the action group
+ Fixes bug where certificate Security overlay failed to close
+ handle tab movement
+ add tab sorting
+ Untangle implicit GTK+3 for Granite and WebKit2
+ Allow running test under debug tools with cmake
+ Install config files to /etc when install prefix is /usr
+ Add missing PO_FILES argument to GETTEXT_PROCESS_PO_FILES
+ Add USE_APIDOCS to build API docs with CMake
+ Rasterize SVG to PNG with rsvg-convert
+ fix bookmarks test regression after fix-1179200-4
+ Add CMakeLists.txt for config directory
+ Install mo files in locale dir
+ don't change uri/title if the tab isn't loaded
+ use a separate signal to store the tab title
+ Check if execinfo.h header exists on BSD
+ fix endless loop in Midori.Database.init
+ Use destructive-action style class in ClearPrivateData
+ Initialize priv->element to avoid crash when freeing
+ Introduces KatzeArray::update-item to handle metadata changes
+ Refactor excuting schema from file into a function
+ Use stock as string in liststore
+ Drop needless (and wrong) HAVE_LIBNOTIFY in preferences
+ Flip horizontal position of the overlay when hit by the mouse
+ Add Midori.URI.get_base_domain and use it in NoJS
+ Introduce Midori.Database and use for history and tabby
+ ctrl+shift+w should trigger a delete-event
+ Implement dialog windows opened via javascript
+ Make get_res_filename work with different hierarchies
+ fix check for new database
+ Speed up session import
+ Import tab title from old sessions
+ Separate CFLAGS for C and add missing HAVE_
+ Install top-level text files and FAQ html/ css to doc dir
+ Provide and install .appdata.xml file for app stores
+ Move bookmarks db handling to midori-bookmarks-db
+ Add XSS to OPTS_LIBRARIES
+ Update condition for UBUNTU_MENUPROXY to work on Saucy
+ Introduce tabby, the new session manager
+ Fix typo in katze_item_set_meta_integer call
+ Allow bookmark bar update on additions resulting from imports
+ Re-work midori_array_query_recursive to not include folder items twice
+ Fix syntax of icon sizes passed to foreach
+ Add bzr revision number to version if available
+ Unify nojs and cookie policy dialogs, make policy changeable within the list
+ Drop all G_ENABLE_DEBUG guards
+ Add -g to CFLAGS to enable debugging symbols
+ Adjust cmake build for Win32
+ Implement CMake build setup
+ Port MidoriApp from Unique/ sockets to GApplication
+ New signal about-content to provide content for about uris
+ Check if browser is NULL in midori_view_get_tab_menu to prevent a crash. Fixes bug #1215652.
+ Ensure proxy setting widgets callbacks don't outlive the widgets themselves
+ Fix webkit2 build error
+ Show the bookmarks import location combobox.
+ Rename internal completion URLs to avoid confusion
+
v0.5.5:
Fix name and text fields inversion in XBEL folder import
Correct packing of cookie and nojs permission dialog.
diff --git a/GNUmakefile.in b/GNUmakefile.in
new file mode 100644
index 00000000..b1459a56
--- /dev/null
+++ b/GNUmakefile.in
@@ -0,0 +1,27 @@
+# Based on "http://iany.me/wiki/Makefile/" by "Ian Yang" licensed under "CC by 3.0"
+
+BUILD_FOLDER := _build
+
+CUSTOM_TARGETS := cmake
+
+# Do not try to use custom target when invoking external makefile
+EXTERNAL_TARGETS := $(filter-out $(CUSTOM_TARGETS), $(MAKECMDGOALS))
+
+# Call all targets using `Makefile` in build directory in one `make` command.
+$(or $(lastword $(EXTERNAL_TARGETS)),all):
+ $(MAKE) -C $(BUILD_FOLDER) $(EXTERNAL_TARGETS)
+
+# If no targets are specified, use the dummy `all` target
+.PHONY: $(EXTERNAL_TARGETS) all
+
+# Do nothing for all targets but last. Also quiet the message "Noting to be done on xxx"
+$(filter-out $(lastword $(EXTERNAL_TARGETS)), $(EXTERNAL_TARGETS)):
+ @cd .
+
+cmake: $(BUILD_FOLDER)
+ cd $(BUILD_FOLDER) && cmake ..
+
+$(BUILD_FOLDER):
+ mkdir $(BUILD_FOLDER)
+
+.PHONY: cmake
diff --git a/HACKING b/HACKING
index 9321af79..1e416b31 100644
--- a/HACKING
+++ b/HACKING
@@ -22,38 +22,45 @@ Join irc://irc.freenode.net/midori #midori on Freenode https://kiwiirc.com/clien
* https://www.bountysource.com/#trackers/130181-midori Add a bounty for a feature or bug you'd like to support
* https://translations.launchpad.net/midori/trunk/+pots/trunk Translate to your own language
* https://github.com/eustasy/midori-browser.org/issues Report website bugs
+ * Write http://wiki.xfce.org/midori/tutorial your own extension - granted that's code, too, but maybe a little easier than hacking the core.
====== Build the code ======
-./waf configure --prefix=/usr
-./waf build
-sudo ./waf install
+mkdir _build
+cd _build
+cmake -DCMAKE_INSTALL_PREFIX=/usr ..
+make
+sudo make install
+
+//Advanced Tip: Pass "-G Ninja" to cmake to use http://martine.github.io/ninja/ Ninja instead of make (usually packaged as ninja or ninja-build).//
+
+If using GTK+3 you'll want to add -DUSE_GTK3=1 to the cmake command line.
Midori can be **run without being installed**.
-_build/default/midori/midori
+_build/midori/midori
You can use a **temporary folder for testing** without affecting normal settings
-_build/default/midori/midori -c /tmp/midoridev
+_build/midori/midori -c /tmp/midoridev
You'll want to **unit test** the code if you're testing a new version or contributed your own changes:
-xvfb-run ./waf check
+xvfb-run make check
Automated daily builds in Launchpad (https://launchpad.net/~elementary-os/+archive/daily ppa:elementary-os/daily and https://launchpad.net/~midori/+archive/midori-dev ppa:midori/midori-dev) run these tests as well.
====== Debugging issues ======
Testing an installed release may reveal crashers or memory corruption which require investigating from a local build and obtaining a stacktrace (backtrace, crash log).
-_build/default/midori/midori -g [OPTIONAL ARGUMENTS]
+_build/midori/midori -g [OPTIONAL ARGUMENTS]
If the problem is a warning, not a crash GLib has a handy feature
-env G_DEBUG=all _build/default/midori/midori -g
+env G_DEBUG=all _build/midori/midori -g
For more specific debugging output, depending on the feature in question you may use
-env MIDORI_DEBUG=help _build/default/midori/midori
+env MIDORI_DEBUG=help _build/midori/midori
To verify a regression you might need to revert a particular change:
@@ -188,7 +195,7 @@ As of Midori 0.5.4 the formula is:
| soup | 2.38.1 | 2.40 |
| webkit | 1.8.3-1.fc17 | 1.10.0-0ubuntu1 |
====== Midori with(out) Granite ======
-When built with Granite (--enable-granite) there're a few key differences:
+When built with Granite (-DUSE_GRANITE=1 or --enable-granite) there're a few key differences:
* Preferences uses a http://valadoc.elementaryos.org/Granite/Granite.Widgets.StaticNotebook.html Granite.Widgets.StaticNotebook
* URL completion styling is slightly different
* Clear Private Data uses **Granite.Widgets.LightWindow**
@@ -204,25 +211,26 @@ For a native build
yum install libsoup-devel webkitgtk3-devel sqlite-devel
For cross-compilation
-yum install mingw{32,64}-webkitgtk3 mingw{32,64}-glib-networking mingw{32,64}-gdb
+yum install mingw{32,64}-webkitgtk3 mingw{32,64}-glib-networking mingw{32,64}-gdb mingw{32,64}-gstreamer-plugins-good
Packages needed when assembling the archive
- yum install faenza-icon-theme p7zip mingw32-nsis
+ yum install faenza-icon-theme p7zip mingw32-nsis greybird-gtk3-theme
Installing those should get you the packages needed to successfully build and develop Midori for Win32.
-
===== Building =====
For 32-bit builds:
-mingw32-env
-./configure --enable-gtk3 --prefix=/usr/i686-w64-mingw32/sys-root/mingw/
+mkdir _mingw32
+cd _mingw32
+mingw32-cmake .. -DUSE_ZEITGEIST=0 -DUSE_GTK3=1 -DCMAKE_INSTALL_PREFIX=/usr/i686-w64-mingw32/sys-root/mingw -DCMAKE_VERBOSE_MAKEFILE=0
make
sudo make install
For 64-bit builds:
-mingw64-env
-./configure --enable-gtk3 --prefix=/usr/x86_64-w64-mingw32/sys-root/mingw/
+mkdir _mingw64
+cd _mingw64
+mingw64-cmake .. -DUSE_ZEITGEIST=0 -DUSE_GTK3=1 -DCMAKE_INSTALL_PREFIX=/usr/x86_64-w64-mingw32/sys-root/mingw -DCMAKE_VERBOSE_MAKEFILE=0
make
sudo make install
@@ -231,14 +239,13 @@ Once built and tested you can assemble the Midori archive with a helper script
env MINGW_PREFIX="/usr/i686-w64-mingw32/sys-root/mingw" ./win32/makedist/makedist.midori
64-bit build:
env MINGW_PREFIX="/usr/x86_64-w64-mingw32/sys-root/mingw/" ./win32/makedist/makedist.midori x64
-
===== Testing =====
For testing your changes unfortuantely a real system is needed because Midori and WebKitGTK+ don't work properly under Wine. Even if it works some problems are not visible when using Wine, but are present when running under a real Windows system and vice versa.
One way around it is to virtualize Windows on a Linux host and mount your MinGW directories as a network drive or shared folder.
====== Jargon ======
- * freeze: the 4th week of a 4 week release cycle, bug fixes only
+ * freeze: a period of bug fixes only eg. 4/2 cycle means 4 weeks of features and 2 weeks to focus on resolving existing problems
* MR: merge request, a branch proposed for review
* ninja: an internal tab, usually empty label, used for taking screenshots
* fortress: user of an ancient release like 0.4.3 as found on Raspberry Pie, Debian, Ubuntu
diff --git a/README b/README
index 961d1984..8894f94a 100644
--- a/README
+++ b/README
@@ -14,12 +14,12 @@ A number of extensions are included by default:
* Managing cookies and scripts via NoJS and Cookie Security Manager.
* Switching open tabs in a vertical panel or a popup window.
-Requirements: GLib 2.32.3, GTK+ 2.24, WebkitGTK+ 1.8.3, libXML2,
+Requirements: GLib 2.32.3, GTK+ 2.24, WebkitGTK+ 1.8.1, libXML2,
libsoup 2.27.90, sqlite 3.0, Vala 0.16, libnotify
Optional: GTK+ 3.0, gcr, Granite 0.2, WebKit2GTK+ 1.11.91/ 2.0.0
-For installation instructions read INSTALL.
+For installation instructions read the file HACKING.
Please report comments, suggestions and bugs to:
https://bugs.launchpad.net/midori
diff --git a/cmake/ContainTest.cmake b/cmake/ContainTest.cmake
index 9f0c760b..5572b588 100644
--- a/cmake/ContainTest.cmake
+++ b/cmake/ContainTest.cmake
@@ -15,4 +15,27 @@ macro(contain_test test_name)
TIMEOUT 42
ENVIRONMENT "${TEST_ENV}"
)
+
+ add_custom_target("gdb-${test_name}"
+ COMMAND env ${TEST_ENV} gdb
+ --batch -ex 'set print thread-events off'
+ -ex 'run' -ex 'bt'
+ ${CMAKE_BINARY_DIR}/tests/${UNIT}
+ )
+
+ add_custom_target("valgrind-${test_name}"
+ COMMAND env ${TEST_ENV} valgrind
+ -q --leak-check=no --num-callers=4
+ --show-possibly-lost=no
+ --undef-value-errors=yes
+ --track-origins=yes
+ ${CMAKE_BINARY_DIR}/tests/${UNIT}
+ )
+
+ add_custom_target("callgrind-${test_name}"
+ COMMAND env ${TEST_ENV} valgrind
+ --tool=callgrind
+ --callgrind-out-file=${UNIT}.callgrind
+ ${CMAKE_BINARY_DIR}/tests/${UNIT}
+ )
endmacro(contain_test)
diff --git a/cmake/FindVala.cmake b/cmake/FindVala.cmake
index 5af36f29..d6c9ca1c 100644
--- a/cmake/FindVala.cmake
+++ b/cmake/FindVala.cmake
@@ -1,12 +1,12 @@
# Copyright (C) 2013 Christian Dywan <christian@twotoasts.de>
-find_program(VALA_EXECUTABLE NAMES valac)
-if (NOT VALA_NOTFOUND)
+find_program(VALA_EXECUTABLE NAMES $ENV{VALAC} valac)
+if (VALA_EXECUTABLE)
execute_process(COMMAND ${VALA_EXECUTABLE} "--version" OUTPUT_VARIABLE "VALA_VERSION")
string(REPLACE "Vala " "" VALA_VERSION ${VALA_VERSION})
string(STRIP ${VALA_VERSION} VALA_VERSION)
else ()
- message(FATAL_ERROR "valac not found")
+ message(FATAL_ERROR "valac not found - install Vala compiler or specify compiler name eg. VALAC=valac-0.20")
endif ()
macro(vala_require VALA_REQUIRED)
diff --git a/config/CMakeLists.txt b/config/CMakeLists.txt
index 028b9794..cf59514b 100644
--- a/config/CMakeLists.txt
+++ b/config/CMakeLists.txt
@@ -6,16 +6,18 @@ set (XDG_CONFIG_DIR "xdg/${CMAKE_PROJECT_NAME}")
file (GLOB_RECURSE CONFIG_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *)
list (REMOVE_ITEM CONFIG_FILES "CMakeLists.txt")
+if (${CMAKE_INSTALL_PREFIX} STREQUAL "/usr")
+ set(CMAKE_INSTALL_SYSCONFDIR "/etc")
+endif()
+
foreach (FILE ${CONFIG_FILES})
string (FIND ${FILE} "adblock" ADBLOCK_CONF)
if (ADBLOCK_CONF GREATER -1)
string (REPLACE "config" "" dirname ${FILE})
install (FILES ${FILE}
DESTINATION "${CMAKE_INSTALL_SYSCONFDIR}/${XDG_CONFIG_DIR}/${dirname}")
- message("${CMAKE_PROJECT_NAME}")
else ()
install (FILES ${FILE}
DESTINATION "${CMAKE_INSTALL_SYSCONFDIR}/${XDG_CONFIG_DIR}")
- message("${FILE}")
endif ()
endforeach ()
diff --git a/configure b/configure
index f5e9d8fa..17021acc 100755
--- a/configure
+++ b/configure
@@ -1,157 +1,83 @@
#! /bin/sh
-
-# waf configure wrapper
-
-# Fancy colors used to beautify the output a bit.
#
-if [ "$NOCOLOR" ] ; then
- NORMAL=""
- BOLD=""
- RED=""
- YELLOW=""
- GREEN=""
-else
- NORMAL="\033[0m"
- BOLD="\033[1m"
- RED="\033[91m"
- YELLOW="\033[01;93m"
- GREEN="\033[92m"
-fi
-
-EXIT_SUCCESS=0
-EXIT_FAILURE=1
-EXIT_ERROR=2
-EXIT_BUG=10
-
-CUR_DIR=$PWD
-
-#possible relative path
-WORKINGDIR=`dirname $0`
-cd $WORKINGDIR
-#abs path
-WORKINGDIR=`pwd`
-cd $CUR_DIR
-
-# Checks for Python interpreter. Honours $PYTHON if set. Stores path to
-# interpreter in $PYTHON.
+# Copyright (C) 2013 Christian Dywan <christian@twotoasts.de>
#
-checkPython()
-{
- if [ -z "$PYTHON" ] ; then
- PYTHON=`which python2 2>/dev/null`
- fi
- if [ -z "$PYTHON" ] ; then
- PYTHON=`which python 2>/dev/null`
- fi
- printf "Checking for Python\t\t\t: "
- if [ ! -x "$PYTHON" ] ; then
- printf $RED"not found!"$NORMAL"\n"
- echo "Please make sure that the Python interpreter is available in your PATH"
- echo "or invoke configure using the PYTHON flag, e.g."
- echo "$ PYTHON=/usr/local/bin/python configure"
- exit $EXIT_FAILURE
- fi
- printf $GREEN"$PYTHON"$NORMAL"\n"
-}
-
-# Checks for WAF. Honours $WAF if set. Stores path to 'waf' in $WAF.
-# Requires that $PYTHON is set.
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
#
-checkWAF()
-{
- printf "Checking for WAF\t\t\t: "
- #installed miniwaf in sourcedir
- if [ -z "$WAF" ] ; then
- if [ -f "${WORKINGDIR}/waf" ] ; then
- WAF="${WORKINGDIR}/waf"
- if [ ! -x "$WAF" ] ; then
- chmod +x $WAF
- fi
- fi
- fi
- if [ -z "$WAF" ] ; then
- if [ -f "${WORKINGDIR}/waf-light" ] ; then
- ${WORKINGDIR}/waf-light --make-waf
- WAF="${WORKINGDIR}/waf"
- fi
- fi
- #global installed waf with waf->waf.py link
- if [ -z "$WAF" ] ; then
- WAF=`which waf 2>/dev/null`
- fi
- # neither waf nor miniwaf could be found
- if [ ! -x "$WAF" ] ; then
- printf $RED"not found"$NORMAL"\n"
- echo "Go to http://code.google.com/p/waf/"
- echo "and download a waf version"
- exit $EXIT_FAILURE
- else
- printf $GREEN"$WAF"$NORMAL"\n"
- fi
- WAF="$PYTHON $WAF"
-}
-
-# Generates a Makefile. Requires that $WAF is set.
+# See the file COPYING for the full license text.
+#
+#~ Usage:
+#~ ./configure [OPTIONS]
+#~ Options:
+#~ --prefix=PREFIX Installation prefix
+#~ --enable-gtk3 Use GTK+3
+#~ --disable-zeitgeist Disable Zeitgeist history integration
+#~ --enable-granite Fancy notebook and pop-overs
+#~ --enable-apidocs API documentation
+#~
+#~ Environment:
+#~ VALAC if defined the valac executable to use, for example valac-0.16
#
-generateMakefile()
-{
- cat > Makefile << EOF
-#!/usr/bin/make -f
-# Waf Makefile wrapper
-WAF_HOME=$CUR_DIR
-
-all:
- @$WAF build
-
-all-debug:
- @$WAF -v build
-
-all-progress:
- @$WAF -p build
-
-install:
- @if test -n "\$(DESTDIR)"; then \\
- $WAF install --destdir="\$(DESTDIR)"; \\
- else \\
- $WAF install; \\
- fi;
-
-.PHONY: install
-
-uninstall:
- @if test -n "\$(DESTDIR)"; then \\
- $WAF uninstall --destdir="\$(DESTDIR)"; \\
- else \\
- $WAF uninstall; \\
- fi;
-
-clean:
- @$WAF clean
-
-distclean:
- @$WAF distclean
- @-rm -rf _build
- @-rm -f Makefile
-
-check:
- @$WAF check
-
-dist:
- @$WAF dist
-
-EOF
-}
-checkPython
-checkWAF
+if [ -z `command -v cmake` ]; then
+ echo Fatal: cmake not installed
+ exit 1
+fi
-echo "calling waf configure with parameters"
-$WAF configure $* || exit $EXIT_ERROR
+while [ $# != 0 ]; do
+ case $1 in
+ --enable-gtk3)
+ ARGS="$ARGS -DUSE_GTK3=1";;
+ --disable-zeitgeist)
+ ARGS="$ARGS -DUSE_ZEITGEIST=0";;
+ --enable-granite)
+ ARGS="$ARGS -DUSE_GRANITE=1";;
+ --enable-apidocs)
+ ARGS="$ARGS -DUSE_APIDOCS=1";;
+ --extra-warnings)
+ ARGS="$ARGS -DEXTRA_WARNINGS=1";;
+ --prefix=*)
+ ARGS="$ARGS -DCMAKE_INSTALL_PREFIX=${1#*=}";;
+ *)
+ grep -e '^#~' $0 | sed s/#~//
+ exit
+ esac
+ shift
+done
+
+BUILD_DIR="_build"
+
+if [ ! -f GNUmakefile ]; then
+ cp -v GNUmakefile.in GNUmakefile || exit 1
+fi
-if [ -f "Makefile" ] ; then
- echo ""
-else
- generateMakefile
+# cmake was invoked in toplevel folder before
+# clean up cmake generated build files to prevent conflicts
+if [ -f CMakeCache.txt ]; then
+ echo
+ echo '####################################################################################'
+ echo 'CMake build files detected in toplevel folder !!'
+ echo 'Please always run "cmake" command from distinct folder when you use cmake yourself.'
+ echo '####################################################################################'
+ echo
+ echo 'Cleaning up...'
+ echo
+
+ rm -fr $BUILD_DIR
+ rm CMakeCache.txt config.h Makefile
+ find . -iname CMakeFiles -type d|xargs rm -fr
+ find . -iname cmake_install.cmake -exec rm {} \;
+ find . -iname CTestTestfile.cmake -exec rm {} \;
+
+ find . -iname *-folders -type d|xargs rm -fr
+ rm -fr data/logo-shade
fi
-exit $EXIT_SUCCESS
+mkdir -p $BUILD_DIR && cd $BUILD_DIR || exit 1
+cmake $ARGS .. || exit 1
+
+echo
+echo "Configuring done, run \"make\" to compile"
diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt
index 0f9cc739..9cef85a5 100644
--- a/data/CMakeLists.txt
+++ b/data/CMakeLists.txt
@@ -16,24 +16,26 @@ file(GLOB_RECURSE DATA_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *)
list(REMOVE_ITEM DATA_FILES "CMakeLists.txt")
foreach(FILE ${DATA_FILES})
- string(FIND ${FILE} "faq." FAQ_FILE)
- string(FIND ${FILE} "midori." MIDORI_FILE)
- string(FIND ${FILE} ".desktop" DESKTOP_FILE)
- string(FIND ${FILE} ".appdata.xml" APPDATA_FILE)
- string(FIND ${FILE} ".svg" SVG_FILE)
- if (FAQ_FILE GREATER -1)
+ if (${FILE} MATCHES "faq.")
install(FILES ${FILE} DESTINATION ${CMAKE_INSTALL_DOCDIR})
- elseif (DESKTOP_FILE GREATER -1 AND NOT WIN32)
- string(SUBSTRING ${FILE} 0 ${DESKTOP_FILE} DESKTOP_ID)
- INTLTOOL_MERGE_DESKTOP (${DESKTOP_ID} po)
- elseif (APPDATA_FILE GREATER -1 AND NOT WIN32)
- string(SUBSTRING ${FILE} 0 ${APPDATA_FILE} DESKTOP_ID)
- INTLTOOL_MERGE_APPDATA (${DESKTOP_ID} po)
- # install(FILES ${FILE} DESTINATION ${CMAKE_INSTALL_DATADIR}/appdata/)
- elseif (SVG_FILE GREATER -1)
- string(SUBSTRING ${FILE} 0 ${SVG_FILE} IMG_ID)
+ elseif (${FILE} MATCHES ".desktop")
+ if (NOT WIN32)
+ string(REPLACE ".desktop.in" "" DESKTOP_ID ${FILE})
+ INTLTOOL_MERGE_DESKTOP (${DESKTOP_ID} po)
+ endif ()
+ elseif (${FILE} MATCHES ".appdata.xml")
+ if (NOT WIN32)
+ string(REPLACE ".appdata.xml.in" "" DESKTOP_ID ${FILE})
+ INTLTOOL_MERGE_APPDATA (${DESKTOP_ID} po)
+ endif ()
+ elseif (${FILE} MATCHES "\\.svg$")
+ string(REPLACE ".svg" "" IMG_ID ${FILE})
SVG2PNG (${IMG_ID} "${CMAKE_INSTALL_DATADIR}/midori/res/")
- elseif(MIDORI_FILE GREATER -1)
+ # These are being handled in add_executable for the "midori" binary
+ elseif (${FILE} MATCHES "\\.ico$")
+ elseif (${FILE} MATCHES "\\.rc$")
+ # This is only meant for testing, and not used in production
+ elseif (${FILE} MATCHES "\\.swf$")
else()
string(FIND ${FILE} "/" IS_DIR)
if (IS_DIR GREATER -1)
diff --git a/data/bookmarks/Create.sql b/data/bookmarks/Create.sql
new file mode 100644
index 00000000..7500fc2c
--- /dev/null
+++ b/data/bookmarks/Create.sql
@@ -0,0 +1,91 @@
+CREATE TABLE IF NOT EXISTS bookmarks
+(
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ parentid INTEGER DEFAULT NULL,
+ title TEXT,
+ uri TEXT,
+ desc TEXT,
+ app INTEGER,
+ toolbar INTEGER,
+ pos_panel INTEGER,
+ pos_bar INTEGER,
+ created DATE DEFAULT CURRENT_TIMESTAMP,
+ last_visit DATE,
+ visit_count INTEGER DEFAULT 0,
+ nick TEXT,
+
+ FOREIGN KEY(parentid) REFERENCES bookmarks(id) ON DELETE CASCADE
+);
+
+/* trigger: insert panel position */
+CREATE TRIGGER IF NOT EXISTS bookmarkInsertPosPanel
+AFTER INSERT ON bookmarks FOR EACH ROW
+BEGIN UPDATE bookmarks SET pos_panel = (
+SELECT ifnull(MAX(pos_panel),0)+1 FROM bookmarks WHERE
+(NEW.parentid IS NOT NULL AND parentid = NEW.parentid)
+OR (NEW.parentid IS NULL AND parentid IS NULL))
+WHERE id = NEW.id; END;
+
+/* trigger: insert Bookmarkbar position */
+CREATE TRIGGER IF NOT EXISTS bookmarkInsertPosBar
+AFTER INSERT ON bookmarks FOR EACH ROW WHEN NEW.toolbar=1
+BEGIN UPDATE bookmarks SET pos_bar = (
+SELECT ifnull(MAX(pos_bar),0)+1 FROM bookmarks WHERE
+((NEW.parentid IS NOT NULL AND parentid = NEW.parentid)
+OR (NEW.parentid IS NULL AND parentid IS NULL)) AND toolbar=1)
+WHERE id = NEW.id; END;
+
+/* trigger: update panel position */
+CREATE TRIGGER IF NOT EXISTS bookmarkUpdatePosPanel
+BEFORE UPDATE OF parentid ON bookmarks FOR EACH ROW
+WHEN ((NEW.parentid IS NULL OR OLD.parentid IS NULL)
+AND NEW.parentid IS NOT OLD.parentid) OR
+((NEW.parentid IS NOT NULL AND OLD.parentid IS NOT NULL)
+AND NEW.parentid!=OLD.parentid)
+BEGIN UPDATE bookmarks SET pos_panel = pos_panel-1
+WHERE ((OLD.parentid IS NOT NULL AND parentid = OLD.parentid)
+OR (OLD.parentid IS NULL AND parentid IS NULL)) AND pos_panel > OLD.pos_panel;
+UPDATE bookmarks SET pos_panel = (
+SELECT ifnull(MAX(pos_panel),0)+1 FROM bookmarks
+WHERE (NEW.parentid IS NOT NULL AND parentid = NEW.parentid)
+OR (NEW.parentid IS NULL AND parentid IS NULL))
+WHERE id = OLD.id; END;
+
+/* trigger: update Bookmarkbar position */
+CREATE TRIGGER IF NOT EXISTS bookmarkUpdatePosBar0
+AFTER UPDATE OF parentid, toolbar ON bookmarks FOR EACH ROW
+WHEN ((NEW.parentid IS NULL OR OLD.parentid IS NULL)
+AND NEW.parentid IS NOT OLD.parentid)
+OR ((NEW.parentid IS NOT NULL AND OLD.parentid IS NOT NULL)
+AND NEW.parentid!=OLD.parentid) OR (OLD.toolbar=1 AND NEW.toolbar=0)
+BEGIN UPDATE bookmarks SET pos_bar = NULL WHERE id = NEW.id;
+UPDATE bookmarks SET pos_bar = pos_bar-1
+WHERE ((OLD.parentid IS NOT NULL AND parentid = OLD.parentid)
+OR (OLD.parentid IS NULL AND parentid IS NULL)) AND pos_bar > OLD.pos_bar; END;
+
+/* trigger: update Bookmarkbar position */
+CREATE TRIGGER IF NOT EXISTS bookmarkUpdatePosBar1
+BEFORE UPDATE OF parentid, toolbar ON bookmarks FOR EACH ROW
+WHEN ((NEW.parentid IS NULL OR OLD.parentid IS NULL)
+AND NEW.parentid IS NOT OLD.parentid) OR
+((NEW.parentid IS NOT NULL AND OLD.parentid IS NOT NULL)
+AND NEW.parentid!=OLD.parentid) OR (OLD.toolbar=0 AND NEW.toolbar=1)
+BEGIN UPDATE bookmarks SET pos_bar = (
+SELECT ifnull(MAX(pos_bar),0)+1 FROM bookmarks WHERE
+(NEW.parentid IS NOT NULL AND parentid = NEW.parentid)
+OR (NEW.parentid IS NULL AND parentid IS NULL))
+WHERE id = OLD.id; END;
+
+/* trigger: delete panel position */
+CREATE TRIGGER IF NOT EXISTS bookmarkDeletePosPanel
+AFTER DELETE ON bookmarks FOR EACH ROW
+BEGIN UPDATE bookmarks SET pos_panel = pos_panel-1
+WHERE ((OLD.parentid IS NOT NULL AND parentid = OLD.parentid)
+OR (OLD.parentid IS NULL AND parentid IS NULL)) AND pos_panel > OLD.pos_panel; END;
+
+/* trigger: delete Bookmarkbar position */
+CREATE TRIGGER IF NOT EXISTS bookmarkDeletePosBar
+AFTER DELETE ON bookmarks FOR EACH ROW WHEN OLD.toolbar=1
+BEGIN UPDATE bookmarks SET pos_bar = pos_bar-1
+WHERE ((OLD.parentid IS NOT NULL AND parentid = OLD.parentid)
+OR (OLD.parentid IS NULL AND parentid IS NULL)) AND pos_bar > OLD.pos_bar; END;
diff --git a/data/bookmarks/Import_old_db_bookmarks.sql b/data/bookmarks/Import_old_db_bookmarks.sql
new file mode 100644
index 00000000..5e023cda
--- /dev/null
+++ b/data/bookmarks/Import_old_db_bookmarks.sql
@@ -0,0 +1,6 @@
+INSERT INTO main.bookmarks (parentid, title, uri, desc, app, toolbar)
+SELECT NULL AS parentid, title, uri, desc, app, toolbar
+FROM old_db.bookmarks;
+UPDATE main.bookmarks SET parentid = (
+SELECT id FROM main.bookmarks AS b1 WHERE b1.title = (
+SELECT folder FROM old_db.bookmarks WHERE title = main.bookmarks.title));
diff --git a/data/error.html b/data/error.html
index 863d920a..73cae7a4 100644
--- a/data/error.html
+++ b/data/error.html
@@ -17,7 +17,7 @@
{suggestions}
</div>
<form method="GET" action="{uri}" id="button">
- <button type="submit" onclick="location.reload(); return false;" autofocus="true" >
+ <button type="submit" onclick="location.reload(); return false;" {autofocus}>
<img style="{hide-button-images}" src="stock://gtk-refresh"/>
<span>{tryagain}</span>
</button>
diff --git a/data/faq.html b/data/faq.html
index 44a6479a..3f557a1e 100644
--- a/data/faq.html
+++ b/data/faq.html
@@ -4,21 +4,21 @@
<meta charset="utf-8" />
<title>midori:faq</title>
<meta name="generator" content="DokuWiki"/>
-<meta name="robots" content="noindex,nofollow"/>
-<meta name="date" content="2013-08-13T17:48:26+0200"/>
+<meta name="robots" content="index,follow"/>
+<meta name="date" content="2013-12-20T22:56:39+0100"/>
<meta name="keywords" content="midori,faq"/>
<link rel="search" type="application/opensearchdescription+xml" href="/lib/exe/opensearch.php" title="Xfce Wiki"/>
<link rel="start" href="/"/>
<link rel="contents" href="/midori/faq?do=index" title="Sitemap"/>
-<link rel="alternate" type="application/rss+xml" title="Recent Changes" href="/feed.php"/>
-<link rel="alternate" type="application/rss+xml" title="Current Namespace" href="/feed.php?mode=list&amp;ns=midori"/>
+<link rel="alternate" type="application/rss+xml" title="Recent changes" href="/feed.php"/>
+<link rel="alternate" type="application/rss+xml" title="Current namespace" href="/feed.php?mode=list&amp;ns=midori"/>
<link rel="alternate" type="text/html" title="Plain HTML" href="/_export/xhtml/midori/faq"/>
<link rel="alternate" type="text/plain" title="Wiki Markup" href="/_export/raw/midori/faq"/>
<link rel="canonical" href="http://wiki.xfce.org/midori/faq"/>
<link rel="stylesheet" href="faq.css" />
<script type="text/javascript">/*<![CDATA[*/var NS='midori';var JSINFO = {"id":"midori:faq","namespace":"midori"};
/*!]]>*/</script>
-<script type="text/javascript" charset="utf-8" src="/lib/exe/js.php?tseed=1371413028"></script>
+<script type="text/javascript" charset="utf-8" src="/lib/exe/js.php?tseed=34912f2e1a4daa1bfa9afb3096df0197"></script>
</head>
<body>
<div class="dokuwiki export">
@@ -169,6 +169,18 @@ Ideally Google would follow <a href="http://code.google.com/p/doctype/wiki/Artic
The set of themed icons Midori can use is very limited. For instance icons for a new tab or the throbber are not guaranteed to be available. To fix this, install a Freedesktop.org <abbr title="specification">spec</abbr> compliant icon theme, such as Elementary, Faenza, Buuf or GNOME.
</p>
+<p>
+if you need to set a custom path for these to be “searched in” (Kiosks and embedded devices for example):
+</p>
+
+<p>
+XDG_DATA_HOME=/path/to/location
+</p>
+
+<p>
+will add an extra path for the icons/.. directory
+</p>
+
</div>
<h4 id="tweaking_midori_on_the_gtk_level">Tweaking Midori on the Gtk level</h4>
@@ -238,7 +250,7 @@ export XDG_CACHE_HOME=/dev/shm
</p>
</div>
-<!-- EDIT3 SECTION "Common problems" [1189-3545] -->
+<!-- EDIT3 SECTION "Common problems" [1189-3737] -->
<h2 class="sectionedit4" id="security_features">Security features</h2>
<div class="level2">
@@ -283,7 +295,7 @@ No key store is available or it&#039;s incorrectly setup. By default GNOME keyri
</p>
</div>
-<!-- EDIT4 SECTION "Security features" [3546-4763] -->
+<!-- EDIT4 SECTION "Security features" [3738-4955] -->
<h2 class="sectionedit5" id="flash_doesn_t_work">Flash doesn&#039;t work</h2>
<div class="level2">
@@ -322,9 +334,11 @@ You can either run that above line and run Midori in the same terminal afterward
<p>
nspluginwrapper is a program that runs Flash and other Netscape plugins in a separate process. So a crash can&#039;t crash the whole browser and Flash, which is GTK+2 can run in GTK+3.
</p>
-<pre class="code bash"><span class="kw2">sudo</span> <span class="kw2">apt-get install</span> flashplugin-installer nspluginwrapper
-<span class="kw2">sudo</span> nspluginwrapper <span class="re5">-i</span> <span class="sy0">/</span>usr<span class="sy0">/</span>lib<span class="sy0">/</span>flashplugin-installer<span class="sy0">/</span>libflashplayer.so
-nspluginwrapper <span class="re5">-v</span> <span class="re5">-a</span> <span class="re5">-n</span> <span class="re5">-i</span></pre>
+<pre class="code bash"><span class="kw2">sudo</span> <span class="kw2">apt-get install</span> nspluginwrapper
+<span class="co0"># On Debian/ Ubuntu - on other systems http://get.adobe.com/de/flashplayer/</span>
+<span class="kw2">sudo</span> <span class="kw2">apt-get install</span> flashplugin-installer
+<span class="co0"># cd into the folder where the plugin was installed</span>
+nspluginwrapper <span class="re5">-v</span> <span class="re5">-a</span> <span class="re5">-n</span> <span class="re5">-i</span> libflashplayer.so</pre>
<p>
~/.mozilla can also be used with Adobe&#039;s tarball if system-wide install is not an option. The approach is confirmed to work with x86-64 as well.
@@ -612,12 +626,12 @@ Most settings listed at <a href="http://webkitgtk.org/reference/webkitgtk/stable
</p>
</div>
-<!-- EDIT5 SECTION "Flash doesn't work" [4764-13226] -->
+<!-- EDIT5 SECTION "Flash doesn't work" [4956-13512] -->
<h1 class="sectionedit6" id="privacy">Privacy</h1>
<div class="level1">
</div>
-<!-- EDIT6 SECTION "Privacy" [13227-13249] -->
+<!-- EDIT6 SECTION "Privacy" [13513-13535] -->
<h2 class="sectionedit7" id="blacklist_cookies">Blacklist cookies</h2>
<div class="level2">
@@ -643,7 +657,7 @@ The feature is currently experimental and will change in future versions.
</p>
</div>
-<!-- EDIT7 SECTION "Blacklist cookies" [13250-13786] -->
+<!-- EDIT7 SECTION "Blacklist cookies" [13536-14072] -->
<h2 class="sectionedit8" id="adblock">Adblock</h2>
<div class="level2">
@@ -652,12 +666,12 @@ The Advertisement Blocker can be activated under Extensions. It uses the same li
</p>
</div>
-<!-- EDIT8 SECTION "Adblock" [13787-14042] -->
+<!-- EDIT8 SECTION "Adblock" [14073-14328] -->
<h1 class="sectionedit9" id="modes">Modes</h1>
<div class="level1">
</div>
-<!-- EDIT9 SECTION "Modes" [14043-14063] -->
+<!-- EDIT9 SECTION "Modes" [14329-14349] -->
<h2 class="sectionedit10" id="web_applications">Web Applications</h2>
<div class="level2">
@@ -678,7 +692,7 @@ There are two closely related features to open websites as dedicated windows of
</p>
</div>
-<!-- EDIT10 SECTION "Web Applications" [14064-14580] -->
+<!-- EDIT10 SECTION "Web Applications" [14350-14866] -->
<h2 class="sectionedit11" id="private_browsing">Private Browsing</h2>
<div class="level2">
@@ -704,7 +718,7 @@ The same options available to -a/ –app can be used for private browsing mode.
</p>
</div>
-<!-- EDIT11 SECTION "Private Browsing" [14581-15500] -->
+<!-- EDIT11 SECTION "Private Browsing" [14867-15786] -->
<h2 class="sectionedit12" id="portable_modewin32">Portable mode/ Win32</h2>
<div class="level2">
@@ -713,7 +727,7 @@ On Windows builds, -P/ –portable causes all data to be written to the “profi
</p>
</div>
-<!-- EDIT12 SECTION "Portable mode/ Win32" [15501-15814] -->
+<!-- EDIT12 SECTION "Portable mode/ Win32" [15787-16100] -->
<h2 class="sectionedit13" id="kiosk_mode">Kiosk mode</h2>
<div class="level2">
@@ -745,7 +759,7 @@ Any links outside end up in an error page. All images and other files won&#039;t
</p>
</div>
-<!-- EDIT13 SECTION "Kiosk mode" [15815-16852] -->
+<!-- EDIT13 SECTION "Kiosk mode" [16101-17138] -->
<h2 class="sectionedit14" id="always_open_midori_in_fullscreen">Always open Midori in Fullscreen</h2>
<div class="level2">
@@ -778,7 +792,7 @@ If for whatever reason this isn&#039;t enough, <a href="https://live.gnome.org/D
</p>
</div>
-<!-- EDIT14 SECTION "Always open Midori in Fullscreen" [16853-17380] -->
+<!-- EDIT14 SECTION "Always open Midori in Fullscreen" [17139-17666] -->
<h2 class="sectionedit15" id="overriding_settings_and_loading_extensions">Overriding settings and loading extensions</h2>
<div class="level2">
@@ -795,7 +809,7 @@ As of Midori 0.5.0 the –execute command line switch got more powerful:
</p>
</div>
-<!-- EDIT15 SECTION "Overriding settings and loading extensions" [17381-17588] -->
+<!-- EDIT15 SECTION "Overriding settings and loading extensions" [17667-17874] -->
<h1 class="sectionedit16" id="proxy_servers">Proxy servers</h1>
<div class="level1">
@@ -879,7 +893,7 @@ server_port = 5555</pre>
</ol>
</div>
-<!-- EDIT16 SECTION "Proxy servers" [17589-19410] -->
+<!-- EDIT16 SECTION "Proxy servers" [17875-19696] -->
<h1 class="sectionedit17" id="keyboard_hotkeys">Keyboard Hotkeys</h1>
<div class="level1">
@@ -961,7 +975,7 @@ When using Ctrl+f to bring up Find, use Ctrl+f again or ESC. When using ”/”
</p>
</div>
-<!-- EDIT17 SECTION "Keyboard Hotkeys" [19411-20743] -->
+<!-- EDIT17 SECTION "Keyboard Hotkeys" [19697-21029] -->
<h1 class="sectionedit18" id="mouse_gestures">Mouse Gestures</h1>
<div class="level1">
@@ -995,7 +1009,7 @@ Additionally, there are programs allowing mouse gestures system-wide, for exampl
</p>
</div>
-<!-- EDIT18 SECTION "Mouse Gestures" [20744-21676] -->
+<!-- EDIT18 SECTION "Mouse Gestures" [21030-21962] -->
<h1 class="sectionedit19" id="user_scripts_and_styles">User scripts and styles</h1>
<div class="level1">
@@ -1056,7 +1070,7 @@ You can also use <a href="http://rightfootin.blogspot.com/2009/04/flashblock-wan
</p>
</div>
-<!-- EDIT19 SECTION "User scripts and styles" [21677-24231] -->
+<!-- EDIT19 SECTION "User scripts and styles" [21963-24517] -->
<h2 class="sectionedit20" id="user_styles">User styles</h2>
<div class="level2">
@@ -1102,23 +1116,41 @@ This user css is used to display the corresponding url when a link is hovered. T
<p>
Customize as needed:
</p>
-<pre class="code">a[href]:hover {
- text-decoration: none !important;
- }
- a[href]:hover:after {
- content: attr(href);
- position: fixed; left: 4px; bottom: 4px;
- padding: 0 6px !important;
- max-width: 95%; overflow: hidden;
- white-space: nowrap; text-overflow: ellipsis;
- font:10pt sans-serif !important; text-shadow: 0 0 12px white;
- background-color: ButtonFace !important; color: ButtonText !important;
- opacity: 0.8; outline: ButtonFace solid thick;
- z-index: 9999;
- }</pre>
-
-</div>
-<!-- EDIT20 SECTION "User styles" [24232-26469] -->
+<pre class="code css">a<span class="br0">&#91;</span>href<span class="br0">&#93;</span><span class="re2">:hover </span><span class="br0">&#123;</span>
+ <span class="kw1">text-decoration</span><span class="sy0">:</span> <span class="kw2">none</span> !important<span class="sy0">;</span>
+ <span class="br0">&#125;</span>
+ a<span class="br0">&#91;</span>href<span class="br0">&#93;</span><span class="re2">:hover</span><span class="re2">:after </span><span class="br0">&#123;</span>
+ <span class="kw1">content</span><span class="sy0">:</span> attr<span class="br0">&#40;</span>href<span class="br0">&#41;</span><span class="sy0">;</span>
+ <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">fixed</span><span class="sy0">;</span> <span class="kw1">left</span><span class="sy0">:</span> <span class="re3">4px</span><span class="sy0">;</span> <span class="kw1">bottom</span><span class="sy0">:</span> <span class="re3">4px</span><span class="sy0">;</span>
+ <span class="kw1">padding</span><span class="sy0">:</span> <span class="nu0">0</span> <span class="re3">6px</span> !important<span class="sy0">;</span>
+ <span class="kw1">max-width</span><span class="sy0">:</span> <span class="re3">95%</span><span class="sy0">;</span> <span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span>
+ <span class="kw1">white-space</span><span class="sy0">:</span> <span class="kw2">nowrap</span><span class="sy0">;</span> text-overflow<span class="sy0">:</span> ellipsis<span class="sy0">;</span>
+ <span class="kw1">font</span><span class="sy0">:</span><span class="re3">10pt</span> <span class="kw2">sans-serif</span> !important<span class="sy0">;</span> <span class="kw1">text-shadow</span><span class="sy0">:</span> <span class="nu0">0</span> <span class="nu0">0</span> <span class="re3">12px</span> <span class="kw2">white</span><span class="sy0">;</span>
+ <span class="kw1">background-color</span><span class="sy0">:</span> ButtonFace !important<span class="sy0">;</span> <span class="kw1">color</span><span class="sy0">:</span> ButtonText !important<span class="sy0">;</span>
+ opacity<span class="sy0">:</span> <span class="nu0">0.8</span><span class="sy0">;</span> <span class="kw1">outline</span><span class="sy0">:</span> ButtonFace <span class="kw2">solid</span> <span class="kw2">thick</span><span class="sy0">;</span>
+ <span class="kw1">z-index</span><span class="sy0">:</span> <span class="nu0">9999</span><span class="sy0">;</span>
+ <span class="br0">&#125;</span></pre>
+
+</div>
+
+<h4 id="tweaking_fonts_via_css">Tweaking fonts via CSS</h4>
+<div class="level4">
+
+<p>
+If changing system-wide font settings isn&#039;t bringing the desired results or rendering should be tweaked only for websites <abbr title="Cascading Style Sheets">CSS</abbr> can be an alternative. Add the following to <strong>~/.local/share/midori/styles</strong>, then restart Midori and make sure that it is enabled Tools → Userstyles.
+</p>
+
+<p>
+Customize as needed:
+</p>
+<pre class="code css"><span class="sy0">*</span> <span class="br0">&#123;</span>
+ font-smooth<span class="sy0">:</span><span class="kw2">always</span><span class="sy0">;</span>
+ -webkit-font-smoothing<span class="sy0">:</span> antialiased<span class="sy0">;</span>
+ text-rendering<span class="sy0">:</span> optimizeLegibility
+<span class="br0">&#125;</span></pre>
+
+</div>
+<!-- EDIT20 SECTION "User styles" [24518-27222] -->
<h2 class="sectionedit21" id="understanding_webkit_version_numbers">Understanding WebKit Version Numbers</h2>
<div class="level2">
@@ -1156,6 +1188,6 @@ Midori&#039;s support for WebKit2 is still provisional, and likely unsuitable fo
</p>
</div>
-<!-- EDIT21 SECTION "Understanding WebKit Version Numbers" [26470-] --></div>
+<!-- EDIT21 SECTION "Understanding WebKit Version Numbers" [27223-] --></div>
</body>
</html>
diff --git a/data/flummi/Create.sql b/data/flummi/Create.sql
new file mode 100644
index 00000000..e9efc421
--- /dev/null
+++ b/data/flummi/Create.sql
@@ -0,0 +1,6 @@
+CREATE TABLE IF NOT EXISTS tasks
+(
+ id INTEGER PRIMARY KEY,
+ once INTEGER DEFAULT 1,
+ command TEXT DEFAULT NULL
+);
diff --git a/data/gtk3.css b/data/gtk3.css
index e6353665..9a95489c 100644
--- a/data/gtk3.css
+++ b/data/gtk3.css
@@ -5,6 +5,7 @@
-GtkWidget-focus-line-width: 0;
-GtkWidget-focus-padding: 0;
padding: 0;
+ border-width: 1px 1px 0 0;
}
GtkOverlay > * {
diff --git a/data/midori.appdata.xml.in b/data/midori.appdata.xml.in
index a30d9504..3c14a435 100644
--- a/data/midori.appdata.xml.in
+++ b/data/midori.appdata.xml.in
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2013 Christian Dywan -->
<application>
<id type="desktop">midori.desktop</id>
<licence>CC0</licence>
@@ -10,15 +11,14 @@ engines and open tabs out of the box. Web developers can use the powerful
web inspector that is a part of WebKit. Individual pages can easily be turned
into web apps and new profiles can be created on demand.
</p>
-<p>A number of extensions are included by default:
+<p>A number of extensions are included by default:</p>
<ul>
- <li>Adblock with support for ABP filter lists and custom rules is built-in.</li>
- <li>You can download files with Aria2 or SteadyFlow.</li>
- <li>User scripts and styles support a la Greasemonkey.</li>
- <li>Managing cookies and scripts via NoJS and Cookie Security Manager.</li>
- <li>Switching open tabs in a vertical panel or a popup window.</li>
+ <li>Adblock with support for ABP filter lists and custom rules is built-in</li>
+ <li>You can download files with Aria2 or SteadyFlow</li>
+ <li>User scripts and styles support a la Greasemonkey</li>
+ <li>Managing cookies and scripts via NoJS and Cookie Security Manager</li>
+ <li>Switching open tabs in a vertical panel or a popup window</li>
</ul>
-</p>
</description>
<url type="homepage">http://www.midori-browser.org/</url>
<screenshots>
diff --git a/data/tabby/Update1.sql b/data/tabby/Update1.sql
new file mode 100644
index 00000000..26b72103
--- /dev/null
+++ b/data/tabby/Update1.sql
@@ -0,0 +1,4 @@
+ALTER TABLE tabs ADD sorting REAL DEFAULT 0;
+
+CREATE INDEX sorting on tabs (sorting ASC);
+CREATE INDEX tstamp on tabs (tstamp ASC);
diff --git a/docs/api/wscript_build b/docs/api/wscript_build
deleted file mode 100644
index df546b18..00000000
--- a/docs/api/wscript_build
+++ /dev/null
@@ -1,38 +0,0 @@
-#! /usr/bin/env python
-# WAF build script for midori
-# This file is licensed under the terms of the expat license, see the file EXPAT.
-
-import pproc as subprocess
-import os
-import Utils
-
-blddir = '_build' # recognized by ack
-
-for module in ('midori', 'katze'):
- try:
- if not os.access (blddir, os.F_OK):
- Utils.check_dir (blddir)
- if not os.access (blddir + '/docs', os.F_OK):
- Utils.check_dir (blddir + '/docs')
- if not os.access (blddir + '/docs/api', os.F_OK):
- Utils.check_dir (blddir + '/docs/api')
- subprocess.call (['gtkdoc-scan', '--module=' + module,
- '--source-dir=' + module, '--output-dir=' + blddir + '/docs/api/' + module,
- '--rebuild-sections', '--rebuild-types'])
- os.chdir (blddir + '/docs/api/' + module)
- subprocess.call (['gtkdoc-mktmpl', '--module=' + module,
- '--output-dir=.' + module])
- subprocess.call (['gtkdoc-mkdb', '--module=' + module,
- '--source-dir=.', '--output-dir=xml',
- '--source-suffixes=c,h', '--output-format=xml',
- '--default-includes=%s/%s.h' % (module, module),
- '--sgml-mode', '--main-sgml-file=%s.sgml' % module])
- if not os.access ('html', os.F_OK):
- Utils.check_dir ('html')
- os.chdir ('html')
- subprocess.call (['gtkdoc-mkhtml', module, '../%s.sgml' % module])
- Utils.pprint ('YELLOW', "Created documentation for %s." % module)
- os.chdir ('../../../../..')
- except Exception, msg:
- print msg
- Utils.pprint ('RED', "Failed to create documentation for %s." % module)
diff --git a/extensions/adblock.c b/extensions/adblock.c
index 71fd4f87..de5ec2bd 100644
--- a/extensions/adblock.c
+++ b/extensions/adblock.c
@@ -647,7 +647,7 @@ adblock_open_preferences_cb (MidoriExtension* extension)
adblock_show_preferences_dialog (extension, NULL);
}
-static inline gint
+static gint
adblock_check_rule (GRegex* regex,
const gchar* patt,
const gchar* req_uri,
@@ -670,7 +670,7 @@ adblock_check_rule (GRegex* regex,
return TRUE;
}
-static inline gboolean
+static gboolean
adblock_is_matched_by_pattern (const gchar* req_uri,
const gchar* page_uri)
{
@@ -689,7 +689,7 @@ adblock_is_matched_by_pattern (const gchar* req_uri,
return FALSE;
}
-static inline gboolean
+static gboolean
adblock_is_matched_by_key (const gchar* req_uri,
const gchar* page_uri)
{
@@ -1073,8 +1073,6 @@ adblock_app_add_browser_cb (MidoriApp* app,
GtkWidget* statusbar;
GtkWidget* image;
GList* children;
- GtkWidget* view;
- gint i;
statusbar = katze_object_get_object (browser, "statusbar");
image = NULL;
@@ -1236,7 +1234,7 @@ adblock_compile_regexp (GString* gpatt,
}
}
-static inline gchar*
+static gchar*
adblock_add_url_pattern (gchar* prefix,
gchar* type,
gchar* line)
@@ -1295,7 +1293,7 @@ adblock_add_url_pattern (gchar* prefix,
return g_string_free (format_patt, should_free);
}
-static inline void
+static void
adblock_frame_add (gchar* line)
{
const gchar* separator = " , ";
@@ -1329,7 +1327,7 @@ adblock_update_css_hash (gchar* domain,
g_hash_table_insert (blockcssprivate, g_strdup (domain), g_strdup (value));
}
-static inline void
+static void
adblock_frame_add_private (const gchar* line,
const gchar* sep)
{
@@ -1382,7 +1380,6 @@ adblock_parse_line (gchar* line)
* Block URL:
* http://example.com/ads/banner123.gif
* http://example.com/ads/banner*.gif
- * http://example.com/ads/*
* Partial match for "ad":
* *ad*
* ad
@@ -1544,7 +1541,9 @@ adblock_file_is_up_to_date (gchar* path)
for (i = 0; i <= 15; i++)
{
- fgets (line, 2000, file);
+ if (!fgets (line, 2000, file))
+ break;
+
if (strncmp ("! Expires", line, 9) == 0)
{
gchar** parts = g_strsplit (line, " ", 4);
@@ -1714,7 +1713,6 @@ adblock_deactivate_cb (MidoriExtension* extension,
MidoriBrowser* browser)
{
GList* children;
- GtkWidget* view;
MidoriApp* app = midori_extension_get_app (extension);
MidoriWebSettings* settings = katze_object_get_object (app, "settings");
diff --git a/extensions/colorful-tabs.c b/extensions/colorful-tabs.c
index 21a18ff3..a81950c4 100644
--- a/extensions/colorful-tabs.c
+++ b/extensions/colorful-tabs.c
@@ -12,15 +12,15 @@
#include <midori/midori.h>
-static GdkColor
-get_foreground_color_for_GdkColor (GdkColor color)
+static void
+get_foreground_color_for_GdkColor (GdkColor* color,
+ GdkColor* fgcolor)
{
- GdkColor fgcolor;
gfloat brightness, r, g, b;
- r = color.red / 255;
- g = color.green / 255;
- b = color.blue / 255;
+ r = color->red / 255;
+ g = color->green / 255;
+ b = color->blue / 255;
/* For math used see algorithms for converting from rgb to yuv */
brightness = 0.299 * r + 0.587 * g + 0.114 * b;
@@ -28,82 +28,75 @@ get_foreground_color_for_GdkColor (GdkColor color)
/* Ensure high contrast by enforcing black/ white text colour. */
/* Brigthness (range 0-255) equals value of y from YUV color space. */
if (brightness < 128)
- gdk_color_parse ("white", &fgcolor);
+ gdk_color_parse ("white", fgcolor);
else
- gdk_color_parse ("black", &fgcolor);
-
- return fgcolor;
+ gdk_color_parse ("black", fgcolor);
}
-static GdkColor adjust_brightness (GdkColor color)
+static void
+adjust_brightness (GdkColor* color)
{
guint dark_grey = 137 * 255;
guint adjustment = 78 * 255;
guint blue = 39 * 255;
guint readjust = 19 * 255;
- if ((color.red < dark_grey)
- && (color.green < dark_grey)
- && (color.blue < dark_grey))
+ if ((color->red < dark_grey)
+ && (color->green < dark_grey)
+ && (color->blue < dark_grey))
{
- color.red += adjustment;
- color.green += adjustment;
- color.blue += adjustment;
+ color->red += adjustment;
+ color->green += adjustment;
+ color->blue += adjustment;
}
- if (color.red < blue)
- color.red = readjust;
+ if (color->red < blue)
+ color->red = readjust;
else
- color.red -= readjust;
+ color->red -= readjust;
- if (color.blue < blue)
- color.blue = readjust;
+ if (color->blue < blue)
+ color->blue = readjust;
else
- color.blue -= readjust;
+ color->blue -= readjust;
- if (color.green < blue)
- color.green = readjust;
+ if (color->green < blue)
+ color->green = readjust;
else
- color.green -= readjust;
-
- return color;
+ color->green -= readjust;
}
-static GdkColor
-view_get_bgcolor_for_favicon (GdkPixbuf* icon)
+static void
+view_get_bgcolor_for_favicon (GdkPixbuf* icon,
+ GdkColor* color)
{
- GdkColor color;
GdkPixbuf* newpix;
guchar* pixels;
newpix = gdk_pixbuf_scale_simple (icon, 1, 1, GDK_INTERP_BILINEAR);
pixels = gdk_pixbuf_get_pixels (newpix);
- color.red = pixels[0] * 255;
- color.green = pixels[1] * 255;
- color.blue = pixels[2] * 255;
-
- color = adjust_brightness (color);
+ color->red = pixels[0] * 255;
+ color->green = pixels[1] * 255;
+ color->blue = pixels[2] * 255;
- return color;
+ adjust_brightness (color);
}
-static GdkColor
-view_get_bgcolor_for_hostname (gchar* hostname)
+static void
+view_get_bgcolor_for_hostname (gchar* hostname,
+ GdkColor* color)
{
gchar* hash, *colorstr;
- GdkColor color;
hash = g_compute_checksum_for_string (G_CHECKSUM_MD5, hostname, 1);
colorstr = g_strndup (hash, 6 + 1);
colorstr[0] = '#';
- gdk_color_parse (colorstr, &color);
+ gdk_color_parse (colorstr, color);
g_free (hash);
g_free (colorstr);
- color = adjust_brightness (color);
-
- return color;
+ adjust_brightness (color);
}
static void
@@ -124,11 +117,11 @@ colorful_tabs_view_notify_uri_cb (MidoriView* view,
GdkPixbuf* icon = midori_view_get_icon (view);
if (icon)
- color = view_get_bgcolor_for_favicon (icon);
+ view_get_bgcolor_for_favicon (icon, &color);
else
- color = view_get_bgcolor_for_hostname (hostname);
+ view_get_bgcolor_for_hostname (hostname, &color);
- fgcolor = get_foreground_color_for_GdkColor (color);
+ get_foreground_color_for_GdkColor (&color, &fgcolor);
midori_view_set_colors (view, &fgcolor, &color);
g_free (hostname);
@@ -158,7 +151,6 @@ colorful_tabs_deactivate_cb (MidoriExtension* extension,
MidoriBrowser* browser)
{
GList* children;
- GtkWidget* view;
MidoriApp* app = midori_extension_get_app (extension);
g_signal_handlers_disconnect_by_func (
@@ -237,8 +229,8 @@ void test_colour_for_hostname (void)
guint i;
for (i = 0; i < G_N_ELEMENTS (items); i++)
{
- color = view_get_bgcolor_for_hostname ((gchar*)items[i].host);
- fgcolor = get_foreground_color_for_GdkColor (color);
+ view_get_bgcolor_for_hostname ((gchar*)items[i].host, &color);
+ get_foreground_color_for_GdkColor (&color, &fgcolor);
g_assert_cmpstr (items[i].color, ==, gdk_color_to_string (&color));
g_assert_cmpstr (items[i].fgcolor, ==, gdk_color_to_string (&fgcolor));
diff --git a/extensions/cookie-permissions/cookie-permission-manager-preferences-window.c b/extensions/cookie-permissions/cookie-permission-manager-preferences-window.c
index a6163fa0..2546ab1b 100644
--- a/extensions/cookie-permissions/cookie-permission-manager-preferences-window.c
+++ b/extensions/cookie-permissions/cookie-permission-manager-preferences-window.c
@@ -46,14 +46,14 @@ struct _CookiePermissionManagerPreferencesWindowPrivate
GtkWidget *editingCombo;
GtkWidget *deleteButton;
GtkWidget *deleteAllButton;
- GtkWidget *askForUnknownPolicyCheckbox;
+ GtkWidget *unknownPolicyCombo;
GtkWidget *addDomainEntry;
GtkWidget *addDomainPolicyCombo;
GtkWidget *addDomainButton;
gint signalManagerChangedDatabaseID;
- gint signalManagerAskForUnknownPolicyID;
- gint signalAskForUnknownPolicyID;
+ gint signalManagerUnknownPolicyID;
+ gint signalUnknownPolicyID;
};
enum
@@ -315,35 +315,43 @@ static void _cookie_permission_manager_preferences_window_manager_database_chang
return;
}
-/* Ask-for-unknown-policy in manager changed or check-box changed */
-static void _cookie_permission_manager_preferences_window_manager_ask_for_unknown_policy_changed(CookiePermissionManagerPreferencesWindow *self,
- GParamSpec *inSpec,
- gpointer inUserData)
+/* unknown-policy in manager changed or drop-down changed */
+static void _cookie_permission_manager_preferences_window_manager_unknown_policy_changed(CookiePermissionManagerPreferencesWindow *self,
+ GParamSpec *inSpec,
+ gpointer inUserData)
{
CookiePermissionManagerPreferencesWindowPrivate *priv=self->priv;
CookiePermissionManager *manager=COOKIE_PERMISSION_MANAGER(inUserData);
- gboolean doAsk;
+ CookiePermissionManagerPolicy policy;
- /* Get new ask-for-unknown-policy value */
- g_object_get(manager, "ask-for-unknown-policy", &doAsk, NULL);
+ /* Get new unknown-policy value */
+ g_object_get(manager, "unknown-policy", &policy, NULL);
- /* Set toogle in widget (but block signal for toggle) */
- g_signal_handler_block(priv->askForUnknownPolicyCheckbox, priv->signalAskForUnknownPolicyID);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->askForUnknownPolicyCheckbox), doAsk);
- g_signal_handler_unblock(priv->askForUnknownPolicyCheckbox, priv->signalAskForUnknownPolicyID);
+ /* Set value in combobox (blocking signal to avoid loops) */
+ g_signal_handler_block(priv->unknownPolicyCombo, priv->signalUnknownPolicyID);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(priv->unknownPolicyCombo), policy);
+ g_signal_handler_unblock(priv->unknownPolicyCombo, priv->signalUnknownPolicyID);
}
-static void _cookie_permission_manager_preferences_window_ask_for_unknown_policy_changed(CookiePermissionManagerPreferencesWindow *self,
- gpointer *inUserData)
+static void _cookie_permission_manager_preferences_window_unknown_policy_changed(CookiePermissionManagerPreferencesWindow *self,
+ gpointer *inUserData)
{
CookiePermissionManagerPreferencesWindowPrivate *priv=self->priv;
- gboolean doAsk;
+ CookiePermissionManagerPolicy policy;
+ GtkTreeIter policyIter;
+
+ if(!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(priv->unknownPolicyCombo), &policyIter))
+ return;
+
+ gtk_tree_model_get(gtk_combo_box_get_model(GTK_COMBO_BOX(priv->unknownPolicyCombo)),
+ &policyIter,
+ 0, &policy,
+ -1);
/* Get toogle state of widget (but block signal for manager) and set in manager */
- g_signal_handler_block(priv->manager, priv->signalManagerAskForUnknownPolicyID);
- doAsk=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->askForUnknownPolicyCheckbox));
- g_object_set(priv->manager, "ask-for-unknown-policy", doAsk, NULL);
- g_signal_handler_unblock(priv->manager, priv->signalManagerAskForUnknownPolicyID);
+ g_signal_handler_block(priv->manager, priv->signalManagerUnknownPolicyID);
+ g_object_set(priv->manager, "unknown-policy", policy, NULL);
+ g_signal_handler_unblock(priv->manager, priv->signalManagerUnknownPolicyID);
}
static void _cookie_permission_manager_preferences_on_policy_editing_started(CookiePermissionManagerPreferencesWindow *self,
@@ -588,8 +596,8 @@ static void cookie_permission_manager_preferences_window_finalize(GObject *inObj
if(priv->signalManagerChangedDatabaseID) g_signal_handler_disconnect(priv->manager, priv->signalManagerChangedDatabaseID);
priv->signalManagerChangedDatabaseID=0;
- if(priv->signalManagerAskForUnknownPolicyID) g_signal_handler_disconnect(priv->manager, priv->signalManagerAskForUnknownPolicyID);
- priv->signalManagerAskForUnknownPolicyID=0;
+ if(priv->signalManagerUnknownPolicyID) g_signal_handler_disconnect(priv->manager, priv->signalManagerUnknownPolicyID);
+ priv->signalManagerUnknownPolicyID=0;
g_object_unref(priv->manager);
priv->manager=NULL;
@@ -619,8 +627,8 @@ static void cookie_permission_manager_preferences_window_set_property(GObject *i
if(priv->signalManagerChangedDatabaseID) g_signal_handler_disconnect(priv->manager, priv->signalManagerChangedDatabaseID);
priv->signalManagerChangedDatabaseID=0;
- if(priv->signalManagerAskForUnknownPolicyID) g_signal_handler_disconnect(priv->manager, priv->signalManagerAskForUnknownPolicyID);
- priv->signalManagerAskForUnknownPolicyID=0;
+ if(priv->signalManagerUnknownPolicyID) g_signal_handler_disconnect(priv->manager, priv->signalManagerUnknownPolicyID);
+ priv->signalManagerUnknownPolicyID=0;
g_object_unref(priv->manager);
priv->manager=NULL;
@@ -641,12 +649,12 @@ static void cookie_permission_manager_preferences_window_set_property(GObject *i
self);
_cookie_permission_manager_preferences_window_manager_database_changed(self, NULL, priv->manager);
- priv->signalManagerAskForUnknownPolicyID=
+ priv->signalManagerUnknownPolicyID=
g_signal_connect_swapped(priv->manager,
- "notify::ask-for-unknown-policy",
- G_CALLBACK(_cookie_permission_manager_preferences_window_manager_ask_for_unknown_policy_changed),
+ "notify::unknown-policy",
+ G_CALLBACK(_cookie_permission_manager_preferences_window_manager_unknown_policy_changed),
self);
- _cookie_permission_manager_preferences_window_manager_ask_for_unknown_policy_changed(self, NULL, priv->manager);
+ _cookie_permission_manager_preferences_window_manager_unknown_policy_changed(self, NULL, priv->manager);
}
break;
@@ -874,13 +882,39 @@ static void cookie_permission_manager_preferences_window_init(CookiePermissionMa
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 5);
- /* Add "ask-for-unknown-policy" checkbox */
- priv->askForUnknownPolicyCheckbox=gtk_check_button_new_with_mnemonic(_("A_sk for policy if unknown for a domain"));
- priv->signalAskForUnknownPolicyID=g_signal_connect_swapped(priv->askForUnknownPolicyCheckbox,
- "toggled",
- G_CALLBACK(_cookie_permission_manager_preferences_window_ask_for_unknown_policy_changed),
- self);
- gtk_box_pack_start(GTK_BOX(vbox), priv->askForUnknownPolicyCheckbox, FALSE, TRUE, 5);
+ /* Add "unknown-policy" combo */
+#ifdef HAVE_GTK3
+ hbox=gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+ gtk_box_set_homogeneous(GTK_BOX(hbox), FALSE);
+#else
+ hbox=gtk_hbox_new(FALSE, 0);
+#endif
+ widget=gtk_label_new(_("Policy for cookies from domains not in the list: "));
+ gtk_container_add(GTK_CONTAINER(hbox), widget);
+
+ list=gtk_list_store_new(2, G_TYPE_INT, G_TYPE_STRING);
+ gtk_list_store_append(list, &listIter);
+ gtk_list_store_set(list, &listIter, 0, COOKIE_PERMISSION_MANAGER_POLICY_UNDETERMINED, 1, _("Ask for a decision"), -1);
+ gtk_list_store_append(list, &listIter);
+ gtk_list_store_set(list, &listIter, 0, COOKIE_PERMISSION_MANAGER_POLICY_ACCEPT, 1, _("Accept"), -1);
+ gtk_list_store_append(list, &listIter);
+ gtk_list_store_set(list, &listIter, 0, COOKIE_PERMISSION_MANAGER_POLICY_ACCEPT_FOR_SESSION, 1, _("Accept for session"), -1);
+ gtk_list_store_append(list, &listIter);
+ gtk_list_store_set(list, &listIter, 0, COOKIE_PERMISSION_MANAGER_POLICY_BLOCK, 1, _("Block"), -1);
+
+ priv->unknownPolicyCombo=gtk_combo_box_new_with_model(GTK_TREE_MODEL(list));
+ gtk_combo_box_set_active(GTK_COMBO_BOX(priv->unknownPolicyCombo), 0);
+ gtk_container_add(GTK_CONTAINER(hbox), priv->unknownPolicyCombo);
+
+ renderer=gtk_cell_renderer_text_new();
+ gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(priv->unknownPolicyCombo), renderer, TRUE);
+ gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(priv->unknownPolicyCombo), renderer, "text", 1);
+
+ priv->signalUnknownPolicyID=g_signal_connect_swapped(priv->unknownPolicyCombo,
+ "changed",
+ G_CALLBACK(_cookie_permission_manager_preferences_window_unknown_policy_changed),
+ self);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 5);
/* Finalize setup of content area */
gtk_box_pack_start(GTK_BOX(priv->contentArea), vbox, TRUE, TRUE, 0);
diff --git a/extensions/cookie-permissions/cookie-permission-manager.c b/extensions/cookie-permissions/cookie-permission-manager.c
index 5cc07e73..f8d88989 100644
--- a/extensions/cookie-permissions/cookie-permission-manager.c
+++ b/extensions/cookie-permissions/cookie-permission-manager.c
@@ -31,7 +31,7 @@ enum
PROP_DATABASE,
PROP_DATABASE_FILENAME,
- PROP_ASK_FOR_UNKNOWN_POLICY,
+ PROP_UNKNOWN_POLICY,
PROP_LAST
};
@@ -49,7 +49,7 @@ struct _CookiePermissionManagerPrivate
MidoriApp *application;
sqlite3 *database;
gchar *databaseFilename;
- gboolean askForUnknownPolicy;
+ CookiePermissionManagerPolicy unknownPolicy;
/* Cookie jar related */
SoupSession *session;
@@ -225,7 +225,7 @@ static void _cookie_permission_manager_open_database(CookiePermissionManager *se
uri=soup_uri_new(NULL);
soup_uri_set_host(uri, domain);
cookies=soup_cookie_jar_get_cookie_list(priv->cookieJar, uri, TRUE);
- for(cookie=cookies; cookie; cookie->next)
+ for(cookie=cookies; cookie; cookie=cookie->next)
{
soup_cookie_jar_delete_cookie(priv->cookieJar, (SoupCookie*)cookie->data);
}
@@ -294,24 +294,23 @@ static gint _cookie_permission_manager_get_policy(CookiePermissionManager *self,
sqlite3_finalize(statement);
/* Check if policy is undetermined. If it is then check if this policy was set by user.
- * If it was not set by user check if we should ask user for his decision
+ * If it was not set by user, check what to do.
*/
- if(!priv->askForUnknownPolicy && !foundPolicy)
+ if(!foundPolicy)
{
- switch(soup_cookie_jar_get_accept_policy(priv->cookieJar))
- {
- case SOUP_COOKIE_JAR_ACCEPT_ALWAYS:
- case SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY:
- policy=COOKIE_PERMISSION_MANAGER_POLICY_ACCEPT;
- break;
+ /* A SoupCookieJar that doesn't want to accept any cookies should override the user's
+ * choice, in case of e.g. private mode, to err on the side of caution. */
+ SoupCookieJarAcceptPolicy soup_policy=soup_cookie_jar_get_accept_policy(priv->cookieJar);
- case SOUP_COOKIE_JAR_ACCEPT_NEVER:
- policy=COOKIE_PERMISSION_MANAGER_POLICY_BLOCK;
- break;
-
- default:
+ if(soup_policy==SOUP_COOKIE_JAR_ACCEPT_ALWAYS || soup_policy==SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY)
+ {
+ policy=priv->unknownPolicy;
+ }
+ else
+ {
+ if(soup_policy!=SOUP_COOKIE_JAR_ACCEPT_NEVER)
g_critical(_("Could not determine global cookie policy to set for domain: %s"), domain);
- break;
+ policy=COOKIE_PERMISSION_MANAGER_POLICY_BLOCK;
}
}
@@ -941,8 +940,8 @@ static void cookie_permission_manager_set_property(GObject *inObject,
_cookie_permission_manager_on_application_changed(self);
break;
- case PROP_ASK_FOR_UNKNOWN_POLICY:
- cookie_permission_manager_set_ask_for_unknown_policy(self, g_value_get_boolean(inValue));
+ case PROP_UNKNOWN_POLICY:
+ cookie_permission_manager_set_unknown_policy(self, g_value_get_int(inValue));
break;
default:
@@ -976,8 +975,8 @@ static void cookie_permission_manager_get_property(GObject *inObject,
g_value_set_string(outValue, self->priv->databaseFilename);
break;
- case PROP_ASK_FOR_UNKNOWN_POLICY:
- g_value_set_boolean(outValue, self->priv->askForUnknownPolicy);
+ case PROP_UNKNOWN_POLICY:
+ g_value_set_int(outValue, self->priv->unknownPolicy);
break;
default:
@@ -1029,12 +1028,14 @@ static void cookie_permission_manager_class_init(CookiePermissionManagerClass *k
NULL,
G_PARAM_READABLE);
- CookiePermissionManagerProperties[PROP_ASK_FOR_UNKNOWN_POLICY]=
- g_param_spec_boolean("ask-for-unknown-policy",
- _("Ask for unknown policy"),
- _("If true this extension ask for policy for every unknown domain."
- "If false this extension uses the global cookie policy set in Midori settings."),
- TRUE,
+ CookiePermissionManagerProperties[PROP_UNKNOWN_POLICY]=
+ g_param_spec_int("unknown-policy",
+ _("Unknown domain policy"),
+ _("The policy to use for domains not individually configured."
+ " This only acts to further restrict the global cookie policy set in Midori settings."),
+ COOKIE_PERMISSION_MANAGER_POLICY_UNDETERMINED,
+ COOKIE_PERMISSION_MANAGER_POLICY_BLOCK,
+ COOKIE_PERMISSION_MANAGER_POLICY_UNDETERMINED,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
g_object_class_install_properties(gobjectClass, PROP_LAST, CookiePermissionManagerProperties);
@@ -1052,7 +1053,7 @@ static void cookie_permission_manager_init(CookiePermissionManager *self)
/* Set up default values */
priv->database=NULL;
priv->databaseFilename=NULL;
- priv->askForUnknownPolicy=TRUE;
+ priv->unknownPolicy=COOKIE_PERMISSION_MANAGER_POLICY_UNDETERMINED;
/* Hijack session's cookie jar to handle cookies requests on our own in HTTP streams
* but remember old handlers to restore them on deactivation
@@ -1078,22 +1079,22 @@ CookiePermissionManager* cookie_permission_manager_new(MidoriExtension *inExtens
}
/* Get/set policy to ask for policy if unknown for a domain */
-gboolean cookie_permission_manager_get_ask_for_unknown_policy(CookiePermissionManager *self)
+CookiePermissionManagerPolicy cookie_permission_manager_get_unknown_policy(CookiePermissionManager *self)
{
- g_return_val_if_fail(IS_COOKIE_PERMISSION_MANAGER(self), FALSE);
+ g_return_val_if_fail(IS_COOKIE_PERMISSION_MANAGER(self), COOKIE_PERMISSION_MANAGER_POLICY_UNDETERMINED);
- return(self->priv->askForUnknownPolicy);
+ return(self->priv->unknownPolicy);
}
-void cookie_permission_manager_set_ask_for_unknown_policy(CookiePermissionManager *self, gboolean inDoAsk)
+void cookie_permission_manager_set_unknown_policy(CookiePermissionManager *self, CookiePermissionManagerPolicy inPolicy)
{
g_return_if_fail(IS_COOKIE_PERMISSION_MANAGER(self));
- if(inDoAsk!=self->priv->askForUnknownPolicy)
+ if(inPolicy!=self->priv->unknownPolicy)
{
- self->priv->askForUnknownPolicy=inDoAsk;
- midori_extension_set_boolean(self->priv->extension, "ask-for-unknown-policy", inDoAsk);
- g_object_notify_by_pspec(G_OBJECT(self), CookiePermissionManagerProperties[PROP_ASK_FOR_UNKNOWN_POLICY]);
+ self->priv->unknownPolicy=inPolicy;
+ midori_extension_set_integer(self->priv->extension, "unknown-policy", inPolicy);
+ g_object_notify_by_pspec(G_OBJECT(self), CookiePermissionManagerProperties[PROP_UNKNOWN_POLICY]);
}
}
diff --git a/extensions/cookie-permissions/cookie-permission-manager.h b/extensions/cookie-permissions/cookie-permission-manager.h
index 6e0ec3a0..1ba5a0ba 100644
--- a/extensions/cookie-permissions/cookie-permission-manager.h
+++ b/extensions/cookie-permissions/cookie-permission-manager.h
@@ -60,8 +60,8 @@ GType cookie_permission_manager_get_type(void);
CookiePermissionManager* cookie_permission_manager_new(MidoriExtension *inExtension, MidoriApp *inApp);
-gboolean cookie_permission_manager_get_ask_for_unknown_policy(CookiePermissionManager *self);
-void cookie_permission_manager_set_ask_for_unknown_policy(CookiePermissionManager *self, gboolean inDoAsk);
+CookiePermissionManagerPolicy cookie_permission_manager_get_unknown_policy(CookiePermissionManager *self);
+void cookie_permission_manager_set_unknown_policy(CookiePermissionManager *self, CookiePermissionManagerPolicy inPolicy);
/* Enumeration */
GType cookie_permission_manager_policy_get_type(void) G_GNUC_CONST;
diff --git a/extensions/cookie-permissions/main.c b/extensions/cookie-permissions/main.c
index fcf87bfc..1efc04f6 100644
--- a/extensions/cookie-permissions/main.c
+++ b/extensions/cookie-permissions/main.c
@@ -21,7 +21,7 @@ static void _cpm_on_activate(MidoriExtension *inExtension, MidoriApp *inApp, gpo
g_return_if_fail(cpm==NULL);
cpm=cookie_permission_manager_new(inExtension, inApp);
- g_object_set(cpm, "ask-for-unknown-policy", midori_extension_get_boolean(inExtension, "ask-for-unknown-policy"), NULL);
+ g_object_set(cpm, "unknown-policy", midori_extension_get_integer(inExtension, "unknown-policy"), NULL);
}
/* This extension was deactivated */
@@ -65,7 +65,7 @@ MidoriExtension *extension_init(void)
"authors", "Stephan Haller <nomad@froevel.de>",
NULL);
- midori_extension_install_boolean(extension, "ask-for-unknown-policy", TRUE);
+ midori_extension_install_integer(extension, "unknown-policy", COOKIE_PERMISSION_MANAGER_POLICY_UNDETERMINED);
midori_extension_install_boolean(extension, "show-details-when-ask", FALSE);
g_signal_connect(extension, "activate", G_CALLBACK(_cpm_on_activate), NULL);
diff --git a/extensions/delayed-load.vala b/extensions/delayed-load.vala
index 24aeb2b9..1ad9102c 100644
--- a/extensions/delayed-load.vala
+++ b/extensions/delayed-load.vala
@@ -9,137 +9,15 @@
See the file COPYING for the full license text.
*/
-using Gtk;
-using Katze;
-using Midori;
-
namespace DelayedLoad {
- private class PreferencesDialog : Gtk.Dialog {
- protected Manager dl_manager;
- protected Scale slider;
-
- public PreferencesDialog (Manager manager) {
- this.dl_manager = manager;
-
- this.title = _("Preferences for %s").printf ( _("Delayed load"));
- if (this.get_class ().find_property ("has-separator") != null)
- this.set ("has-separator", false);
- this.border_width = 5;
- this.set_modal (true);
- this.set_default_size (350, 100);
- this.create_widgets ();
-
- this.response.connect (response_cb);
- }
-
- private void response_cb (Gtk.Dialog source, int response_id) {
- switch (response_id) {
- case ResponseType.APPLY:
- this.dl_manager.set_integer ("delay", (int) (this.slider.get_value () * 1000));
- this.dl_manager.preferences_changed ();
- this.destroy ();
- break;
- case ResponseType.CANCEL:
- this.destroy ();
- break;
- }
- }
-
- private void create_widgets () {
- Label text = new Label (_("Delay in seconds until loading the page:"));
-#if HAVE_GTK3
- this.slider = new Scale.with_range (Orientation.HORIZONTAL, 0, 15, 0.1);
-#else
- this.slider = new HScale.with_range (0, 15, 0.1);
-#endif
-
- int delay = this.dl_manager.get_integer ("delay");
- if (delay > 0)
- this.slider.set_value ((float)delay / 1000);
-
-#if HAVE_GTK3
- Gtk.Box vbox = get_content_area () as Gtk.Box;
- vbox.pack_start (text, false, false, 0);
- vbox.pack_start (this.slider, false, true, 0);
-#else
- this.vbox.pack_start (text, false, false, 0);
- this.vbox.pack_start (this.slider, false, true, 0);
-#endif
-
- this.add_button (Gtk.STOCK_CANCEL, ResponseType.CANCEL);
- this.add_button (Gtk.STOCK_APPLY, ResponseType.APPLY);
-
- this.show_all ();
- }
- }
-
- private class TabShaker : GLib.Object {
- public unowned Midori.Browser browser;
- public GLib.PtrArray tasks;
-
- public bool reload_tab () {
- if (tasks.len == 1) {
- Midori.View? view = browser.tab as Midori.View;
- Midori.View scheduled_view = tasks.index (0) as Midori.View;
- if (scheduled_view == view) {
- unowned Katze.Item item = view.get_proxy_item ();
-
- int64 delay = item.get_meta_integer ("delay");
- if (delay == Midori.Delay.PENDING_UNDELAY) {
- view.reload (true);
- }
- }
- }
- tasks.remove_index (0);
- return false;
- }
-
- public TabShaker (Midori.Browser browser) {
- this.browser = browser;
- }
-
- construct {
- this.tasks = new GLib.PtrArray ();
- }
- }
-
private class Manager : Midori.Extension {
- private int timeout = 0;
- private HashTable<Midori.Browser, TabShaker> tasks;
-
- public signal void preferences_changed ();
-
- private void preferences_changed_cb () {
- this.timeout = get_integer ("delay");
- }
-
- private void show_preferences () {
- PreferencesDialog dialog = new PreferencesDialog (this);
- dialog.show ();
- }
-
- private void schedule_reload (Midori.Browser browser, Midori.View view) {
- if (this.timeout == 0)
- view.reload (true);
- else {
- unowned TabShaker shaker = tasks.get (browser);
- if (shaker != null) {
- shaker.tasks.add (view);
- Midori.Timeout.add (this.timeout, shaker.reload_tab);
- }
- }
- }
-
private void tab_changed (Midori.View? old_view, Midori.View? new_view) {
if (new_view != null) {
- Midori.App app = get_app ();
- Midori.Browser browser = app.browser;
-
unowned Katze.Item item = new_view.get_proxy_item ();
int64 delay = item.get_meta_integer ("delay");
if (delay == Midori.Delay.PENDING_UNDELAY && new_view.progress < 1.0) {
- this.schedule_reload (browser, new_view);
+ new_view.reload (true);
}
}
}
@@ -153,11 +31,6 @@ namespace DelayedLoad {
}
public void activated (Midori.App app) {
- /* FIXME: override behavior without changing the preference */
- app.settings.load_on_startup = MidoriStartup.DELAYED_PAGES;
-
- this.preferences_changed ();
-
foreach (Midori.Browser browser in app.get_browsers ()) {
browser_added (browser);
}
@@ -175,17 +48,11 @@ namespace DelayedLoad {
internal Manager () {
GLib.Object (name: _("Delayed load"),
description: _("Delay page load until you actually use the tab."),
- version: "0.1",
+ version: "0.2",
authors: "André Stösel <andre@stoesel.de>");
- install_integer ("delay", 0);
-
activate.connect (this.activated);
deactivate.connect (this.deactivated);
- open_preferences.connect (show_preferences);
- preferences_changed.connect (preferences_changed_cb);
-
- this.tasks = new HashTable<Midori.Browser, TabShaker> (GLib.direct_hash, GLib.direct_equal);
}
}
}
diff --git a/extensions/devpet.vala b/extensions/devpet.vala
index d42c1d9f..8af341ba 100644
--- a/extensions/devpet.vala
+++ b/extensions/devpet.vala
@@ -74,6 +74,7 @@ namespace DevPet {
this.destroy ();
}
+ #if HAVE_EXECINFO_H
private void row_activated (Gtk.TreePath path, Gtk.TreeViewColumn column) {
Gtk.TreeIter iter;
if (this.manager.list_store.get_iter (out iter, path)) {
@@ -87,6 +88,7 @@ namespace DevPet {
data_window.show ();
}
}
+ #endif
private void create_content () {
this.title = "Midori - DevPet";
@@ -141,14 +143,15 @@ namespace DevPet {
private class Manager : Midori.Extension {
public Gtk.ListStore list_store;
- private Gtk.StatusIcon trayicon;
+ private Gtk.StatusIcon? trayicon = null;
private LogWindow? log_window;
private GLib.LogFunc default_log_func;
private GLib.LogLevelFlags icon_flag = GLib.LogLevelFlags.LEVEL_DEBUG;
public void clear_list() {
this.icon_flag = GLib.LogLevelFlags.LEVEL_DEBUG;
- this.trayicon.set_visible (false);
+ if(this.trayicon != null)
+ this.trayicon.set_visible (false);
this.list_store.clear ();
}
@@ -165,10 +168,21 @@ namespace DevPet {
return Gtk.Stock.DIALOG_INFO;
}
+ private void ensure_trayicon() {
+ if(this.trayicon != null)
+ return;
+
+ this.trayicon = new Gtk.StatusIcon ();
+ this.trayicon.set_tooltip_text ("Midori - DevPet");
+ this.trayicon.activate.connect(this.show_error_log);
+ }
+
private void log_handler(string? domain, GLib.LogLevelFlags flags, string message) {
Gtk.TreeIter iter;
unowned string stock = this.get_stock_from_log_level (flags);
+ this.ensure_trayicon();
+
if (flags < this.icon_flag) {
this.icon_flag = flags;
this.trayicon.set_from_stock (stock);
@@ -213,13 +227,25 @@ namespace DevPet {
}
private void activated (Midori.App app) {
- this.trayicon.set_visible (false);
this.default_log_func = GLib.Log.default_handler;
GLib.Log.set_default_handler (this.log_handler);
+ if (this.trayicon != null) {
+ int length = 0;
+ this.list_store.foreach((model, path, iter) => {
+ length++;
+ return false;
+ });
+
+ if (length > 0) {
+ this.trayicon.set_visible (true);
+ }
+ }
}
private void deactivated () {
- this.trayicon.set_visible (false);
+ if (this.trayicon != null)
+ this.trayicon.set_visible (false);
+
GLib.Log.set_default_handler (this.default_log_func);
}
@@ -229,10 +255,6 @@ namespace DevPet {
version: "0.1",
authors: "André Stösel <andre@stoesel.de>");
- this.trayicon = new Gtk.StatusIcon ();
- this.trayicon.set_tooltip_text ("Midori - DevPet");
- this.trayicon.activate.connect(this.show_error_log);
-
this.list_store = new Gtk.ListStore (TreeCells.COUNT, typeof(string), typeof(string), typeof (string));
this.activate.connect (this.activated);
diff --git a/extensions/feed-panel/feed-panel.c b/extensions/feed-panel/feed-panel.c
index 0753de32..b4e565a0 100644
--- a/extensions/feed-panel/feed-panel.c
+++ b/extensions/feed-panel/feed-panel.c
@@ -440,7 +440,6 @@ feed_panel_open_in_tab_activate_cb (GtkWidget* menuitem,
{
KatzeItem* item;
const gchar* uri;
- guint n;
item = (KatzeItem*)g_object_get_data (G_OBJECT (menuitem), "KatzeItem");
diff --git a/extensions/flummi.vala b/extensions/flummi.vala
new file mode 100644
index 00000000..7e8decb2
--- /dev/null
+++ b/extensions/flummi.vala
@@ -0,0 +1,94 @@
+/*
+ Copyright (C) 2013 André Stösel <andre@stoesel.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ See the file COPYING for the full license text.
+*/
+
+namespace Flummi {
+ private class Manager : Midori.Extension {
+ private bool bounce () {
+ try {
+ Midori.App app = this.get_app ();
+ Midori.Browser? browser = app.browser;
+
+ if (browser == null || browser.tab == null) {
+ return true;
+ }
+
+
+ Midori.Database database = new Midori.Database ("flummi.db");
+ unowned Sqlite.Database db = database.db;
+
+ string sqlcmd = "SELECT id, once, command FROM tasks ORDER BY id;";
+
+ Sqlite.Statement stmt;
+ if (db.prepare_v2 (sqlcmd, -1, out stmt, null) != Sqlite.OK) {
+ GLib.critical ("Failed to select from database: %s", db.errmsg ());
+ return false;
+ }
+
+ int result = stmt.step ();
+ if (!(result == Sqlite.DONE || result == Sqlite.ROW)) {
+ GLib.critical ("Failed to select from database: %s", db.errmsg ());
+ return false;
+ }
+
+ Sqlite.Statement del_stmt;
+ sqlcmd = "DELETE FROM `tasks` WHERE id = :task_id;";
+ if (db.prepare_v2 (sqlcmd, -1, out del_stmt, null) != Sqlite.OK) {
+ GLib.critical ("Failed to update database: %s", db.errmsg ());
+ return false;
+ }
+
+ while (result == Sqlite.ROW) {
+ int64 id = stmt.column_int64 (0);
+ int64 once = stmt.column_int64 (1);
+ string command = stmt.column_text (2);
+
+ string[] commands = { command };
+
+ if (!app.send_command (commands)) {
+ GLib.critical ("Command failed: %s", command);
+ return false;
+ }
+
+ if (once > 0) {
+ del_stmt.bind_int64 (del_stmt.bind_parameter_index (":task_id"), id);
+ if (del_stmt.step () != Sqlite.DONE) {
+ GLib.critical ("Failed to delete record %lf.\nError: %s", id, db.errmsg ());
+ return false;
+ }
+ }
+
+ result = stmt.step ();
+ }
+ } catch (Midori.DatabaseError schema_error) {
+ GLib.error (schema_error.message);
+ }
+
+ return false;
+ }
+
+ private void activated (Midori.App app) {
+ GLib.Idle.add (this.bounce);
+ }
+
+ internal Manager () {
+ GLib.Object (name: _("Flummi"),
+ description: _("This extension provides a task queue for update jobs or recurring events."),
+ version: "0.1",
+ authors: "André Stösel <andre@stoesel.de>");
+
+ this.activate.connect (this.activated);
+ }
+ }
+}
+
+public Midori.Extension extension_init () {
+ return new Flummi.Manager ();
+}
diff --git a/extensions/formhistory/formhistory.c b/extensions/formhistory/formhistory.c
index 660502e3..060ac1c7 100644
--- a/extensions/formhistory/formhistory.c
+++ b/extensions/formhistory/formhistory.c
@@ -495,6 +495,12 @@ formhistory_new (const gchar* config_dir)
priv->master_password_canceled = 0;
formhistory_construct_popup_gui (priv);
+ if (config_dir == NULL)
+ {
+ priv->db = NULL;
+ return priv;
+ }
+
filename = g_build_filename (config_dir, "forms.db", NULL);
priv->database = midori_database_new (filename, &error);
g_free (filename);
diff --git a/extensions/history-list.vala b/extensions/history-list.vala
index 5273adce..3a864b18 100644
--- a/extensions/history-list.vala
+++ b/extensions/history-list.vala
@@ -77,7 +77,7 @@ namespace HistoryList {
protected bool is_dirty = false;
protected Gtk.ScrolledWindow? scroll_windows;
- protected void store_append_row (GLib.PtrArray list, Gtk.ListStore store, out Gtk.TreeIter iter) {
+ protected void store_append_row (GLib.PtrArray list, Gtk.ListStore store) {
for (var i = list.len; i > 0; i--) {
Midori.View view = list.index (i - 1) as Midori.View;
@@ -86,6 +86,7 @@ namespace HistoryList {
unowned string title = view.get_display_title ();
+ Gtk.TreeIter iter;
store.append (out iter);
store.set (iter, TabTreeCells.TREE_CELL_PIXBUF, icon,
TabTreeCells.TREE_CELL_STRING, title,
@@ -96,11 +97,10 @@ namespace HistoryList {
}
protected virtual void insert_rows (Gtk.ListStore store) {
- Gtk.TreeIter iter;
unowned GLib.PtrArray list = this.browser.get_data<GLib.PtrArray> ("history-list-tab-history");
unowned GLib.PtrArray list_new = this.browser.get_data<GLib.PtrArray> ("history-list-tab-history-new");
- store_append_row (list, store, out iter);
- store_append_row (list_new, store, out iter);
+ store_append_row (list, store);
+ store_append_row (list_new, store);
}
protected void resize_treeview () {
@@ -243,16 +243,15 @@ namespace HistoryList {
protected bool first_step = true;
protected override void insert_rows (Gtk.ListStore store) {
- Gtk.TreeIter iter;
unowned GLib.PtrArray list = this.browser.get_data<GLib.PtrArray> ("history-list-tab-history-new");
- store_append_row (list, store, out iter);
+ store_append_row (list, store);
if ((int)list.len == 0) {
this.old_tabs = true;
var label = new Gtk.Label (_("There are no unvisited tabs"));
this.vbox.pack_start (label, true, true, 0);
unowned GLib.PtrArray list_old = this.browser.get_data<GLib.PtrArray> ("history-list-tab-history");
- store_append_row (list_old, store, out iter);
+ store_append_row (list_old, store);
}
}
diff --git a/extensions/mouse-gestures.c b/extensions/mouse-gestures.c
index 46c14c86..7238b5d8 100644
--- a/extensions/mouse-gestures.c
+++ b/extensions/mouse-gestures.c
@@ -384,7 +384,7 @@ mouse_gestures_load_config (MidoriExtension* extension)
for(i = 0; keys[i]; i++)
{
gsize n_strokes;
- int j;
+ guint j;
gchar** stroke_strings = g_key_file_get_string_list (keyfile, "gestures", keys[i], &n_strokes,
NULL);
diff --git a/extensions/statusbar-features.c b/extensions/statusbar-features.c
index 6be3ff2a..22934123 100644
--- a/extensions/statusbar-features.c
+++ b/extensions/statusbar-features.c
@@ -126,7 +126,7 @@ statusbar_features_property_proxy (MidoriWebSettings* settings,
else if (!strcmp (property, "zoom-level"))
{
MidoriBrowser* browser = midori_browser_get_for_widget (toolbar);
- gint i;
+ guint i;
button = gtk_combo_box_text_new_with_entry ();
gtk_entry_set_width_chars (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (button))), 4);
for (i = 0; i < G_N_ELEMENTS (zoom_levels); i++)
diff --git a/extensions/tabby.vala b/extensions/tabby.vala
index 801ea970..13fa9a6a 100644
--- a/extensions/tabby.vala
+++ b/extensions/tabby.vala
@@ -10,6 +10,10 @@
*/
namespace Tabby {
+ int IDLE_RESTORE_COUNT = 13;
+ /* FixMe: don't use a global object */
+ Midori.App? APP;
+
/* function called from Manager object */
public interface IStorage : GLib.Object {
public abstract Katze.Array get_sessions ();
@@ -23,9 +27,16 @@ namespace Tabby {
public abstract void add_item (Katze.Item item);
public abstract void attach (Midori.Browser browser);
public abstract void restore (Midori.Browser browser);
+ public abstract void remove ();
public abstract void close ();
}
+ public enum SessionState {
+ OPEN,
+ CLOSED,
+ RESTORING
+ }
+
namespace Base {
/* each base class should connect to all necessary signals and provide an abstract function to handle them */
@@ -34,8 +45,18 @@ namespace Tabby {
public abstract Katze.Array get_sessions ();
public abstract Base.Session get_new_session ();
+
+ public void start_new_session () {
+ Katze.Array sessions = new Katze.Array (typeof (Session));
+ this.init_sessions (sessions);
+ }
+
public void restore_last_sessions () {
Katze.Array sessions = this.get_sessions ();
+ this.init_sessions (sessions);
+ }
+
+ private void init_sessions (Katze.Array sessions) {
if (sessions.is_empty ()) {
sessions.add_item (this.get_new_session ());
}
@@ -58,25 +79,46 @@ namespace Tabby {
public virtual void import_session (Katze.Array tabs) {
Session session = this.get_new_session ();
GLib.List<unowned Katze.Item> items = tabs.get_items ();
+ double i = 0;
foreach (Katze.Item item in items) {
+ item.set_meta_string ("sorting", i.to_string());
+ i += 1024;
session.add_item (item);
}
}
}
public abstract class Session : GLib.Object, ISession {
+ protected GLib.SList<double?> tab_sorting;
+
+ public Midori.Browser browser { get; protected set; }
+ public SessionState state { get; protected set; default = SessionState.CLOSED; }
+
public abstract void add_item (Katze.Item item);
public abstract void uri_changed (Midori.View view, string uri);
public abstract void data_changed (Midori.View view);
public abstract void tab_added (Midori.Browser browser, Midori.View view);
public abstract void tab_removed (Midori.Browser browser, Midori.View view);
- public abstract void close ();
+ public abstract void tab_switched (Midori.View? old_view, Midori.View? new_view);
+ public abstract void tab_reordered (Gtk.Widget tab, uint pos);
+
+ public abstract void remove ();
+
public abstract Katze.Array get_tabs ();
+ public abstract double? get_max_sorting ();
public void attach (Midori.Browser browser) {
- browser.add_tab.connect (this.tab_added);
+ this.browser = browser;
+
+ browser.add_tab.connect_after (this.tab_added);
browser.add_tab.connect (this.helper_data_changed);
+
browser.remove_tab.connect (this.tab_removed);
+ browser.switch_tab.connect (this.tab_switched);
+ browser.delete_event.connect_after(this.delete_event);
+ browser.notebook.page_reordered.connect_after (this.tab_reordered);
+
+ this.state = SessionState.OPEN;
foreach (Midori.View view in browser.get_tabs ()) {
this.tab_added (browser, view);
@@ -85,76 +127,235 @@ namespace Tabby {
}
public void restore (Midori.Browser browser) {
+ this.browser = browser;
+
Katze.Array tabs = this.get_tabs ();
+ unowned Katze.Array? open_uris = browser.get_data ("tabby-open-uris");
+
+ if(tabs.is_empty () && open_uris == null) {
+ /* Using get here to avoid MidoriMidoriStartup in generated C with Vala 0.20.1 */
+ int load_on_startup;
+ APP.settings.get ("load-on-startup", out load_on_startup);
- if(tabs.is_empty ()) {
Katze.Item item = new Katze.Item ();
- item.uri = "about:home";
+
+ if (load_on_startup == Midori.MidoriStartup.BLANK_PAGE) {
+ item.uri = "about:dial";
+ } else {
+ item.uri = "about:home";
+ }
+
tabs.add_item (item);
}
- browser.add_tab.connect (this.tab_added);
+ browser.add_tab.connect_after (this.tab_added);
browser.add_tab.connect (this.helper_data_changed);
+
browser.remove_tab.connect (this.tab_removed);
+ browser.switch_tab.connect (this.tab_switched);
+ browser.delete_event.connect_after(this.delete_event);
+ browser.notebook.page_reordered.connect_after (this.tab_reordered);
- GLib.List<unowned Katze.Item> items = tabs.get_items ();
+ GLib.List<unowned Katze.Item> items = new GLib.List<unowned Katze.Item> ();
+ if (open_uris != null) {
+ items.concat (open_uris.get_items ());
+ }
+ items.concat (tabs.get_items ());
unowned GLib.List<unowned Katze.Item> u_items = items;
bool delay = false;
+ bool should_delay = false;
+
+ int load_on_startup;
+ APP.settings.get ("load-on-startup", out load_on_startup);
+ should_delay = load_on_startup == Midori.MidoriStartup.DELAYED_PAGES;
+
+ if (APP.crashed == true) {
+ delay = true;
+ should_delay = true;
+ }
+
+ this.state = SessionState.RESTORING;
GLib.Idle.add (() => {
/* Note: we need to use `items` for something to maintain a valid reference */
+ GLib.PtrArray new_tabs = new GLib.PtrArray ();
if (items.length () > 0) {
- for (int i = 0; i < 3; i++) {
- if (u_items == null)
+ for (int i = 0; i < IDLE_RESTORE_COUNT; i++) {
+ if (u_items == null) {
+ this.helper_reorder_tabs (new_tabs);
+ this.state = SessionState.OPEN;
return false;
+ }
Katze.Item t_item = u_items.data<Katze.Item>;
- if (delay)
+ t_item.set_meta_integer ("append", 1);
+
+ if (delay && should_delay)
t_item.set_meta_integer ("delay", Midori.Delay.DELAYED);
else
delay = true;
- browser.add_item (t_item);
+ unowned Gtk.Widget tab = browser.add_item (t_item);
+ new_tabs.add (tab);
u_items = u_items.next;
}
+ this.helper_reorder_tabs (new_tabs);
+ }
+ if (u_items == null) {
+ this.state = SessionState.OPEN;
+ return false;
}
- return u_items != null;
+ return true;
});
}
- private void helper_data_changed (Midori.Browser browser, Midori.View view) {
- ulong sig_id = 0;
- sig_id = view.web_view.load_started.connect (() => {
+ public virtual void close () {
+ this.browser.add_tab.disconnect (this.tab_added);
+ this.browser.add_tab.disconnect (this.helper_data_changed);
+ this.browser.remove_tab.disconnect (this.tab_removed);
+ this.browser.switch_tab.disconnect (this.tab_switched);
+ this.browser.delete_event.disconnect (this.delete_event);
+ this.browser.notebook.page_reordered.disconnect (this.tab_reordered);
+ }
+
+#if HAVE_GTK3
+ protected bool delete_event (Gtk.Widget widget, Gdk.EventAny event) {
+#else
+ protected bool delete_event (Gtk.Widget widget, Gdk.Event event) {
+#endif
+
+ this.close();
+ return false;
+
+ }
+
+ protected double? get_tab_sorting (Midori.View view) {
+ int this_pos = this.browser.notebook.page_num (view);
+ Midori.View prev_view = this.browser.notebook.get_nth_page (this_pos - 1) as Midori.View;
+ Midori.View next_view = this.browser.notebook.get_nth_page (this_pos + 1) as Midori.View;
+
+ string? prev_meta_sorting = null;
+ string? next_meta_sorting = null;
+ double? prev_sorting, next_sorting, this_sorting;
+
+ if (prev_view != null) {
+ unowned Katze.Item prev_item = prev_view.get_proxy_item ();
+ prev_meta_sorting = prev_item.get_meta_string ("sorting");
+ }
+
+ if (prev_meta_sorting == null)
+ if (this.state == SessionState.RESTORING)
+ prev_sorting = this.get_max_sorting ();
+ else
+ prev_sorting = double.parse ("0");
+ else
+ prev_sorting = double.parse (prev_meta_sorting);
+
+ if (next_view != null) {
+ unowned Katze.Item next_item = next_view.get_proxy_item ();
+ next_meta_sorting = next_item.get_meta_string ("sorting");
+ }
+
+ if (next_meta_sorting == null)
+ next_sorting = prev_sorting + 2048;
+ else
+ next_sorting = double.parse (next_meta_sorting);
+
+ this_sorting = prev_sorting + (next_sorting - prev_sorting) / 2;
+
+ return this_sorting;
+ }
+
+ private void load_status (GLib.Object _view, ParamSpec pspec) {
+ Midori.View view = (Midori.View)_view;
+
+ if (view.load_status == Midori.LoadStatus.PROVISIONAL) {
unowned Katze.Item item = view.get_proxy_item ();
int64 delay = item.get_meta_integer ("delay");
if (delay == Midori.Delay.UNDELAYED) {
view.web_view.notify["uri"].connect ( () => {
- this.uri_changed (view, view.web_view.uri);
- });
+ this.uri_changed (view, view.web_view.uri);
+ });
view.web_view.notify["title"].connect ( () => {
- this.data_changed (view);
- });
+ this.data_changed (view);
+ });
- GLib.SignalHandler.disconnect (view.web_view, sig_id);
}
- });
+
+ view.notify["load-status"].disconnect (load_status);
+ }
+ }
+
+ private void helper_data_changed (Midori.Browser browser, Midori.View view) {
+ view.notify["load-status"].connect (load_status);
+
+ view.new_view.connect (this.helper_duplicate_tab);
+ }
+
+ private void helper_reorder_tabs (GLib.PtrArray new_tabs) {
+ CompareDataFunc<double?> helper_compare_data = (a, b) => {
+ if (a > b)
+ return 1;
+ else if(a < b)
+ return -1;
+ return 0;
+ };
+
+ GLib.CompareFunc<double?> helper_compare_func = (a,b) => {
+ return a == b ? 0 : -1;
+ };
+
+ this.browser.notebook.page_reordered.disconnect (this.tab_reordered);
+ for(var i = 0; i < new_tabs.len; i++) {
+ Midori.View tab = new_tabs.index(i) as Midori.View;
+
+ unowned Katze.Item item = tab.get_proxy_item ();
+
+ double? sorting;
+ string? sorting_string = item.get_meta_string ("sorting");
+ if (sorting_string != null) { /* we have to use a seperate if condition to avoid a `possibly unassigned local variable` error */
+ if (double.try_parse (item.get_meta_string ("sorting"), out sorting)) {
+ this.tab_sorting.insert_sorted_with_data (sorting, helper_compare_data);
+
+ int index = this.tab_sorting.position (this.tab_sorting.find_custom (sorting, helper_compare_func));
+
+ this.browser.notebook.reorder_child (tab, index);
+ }
+ }
+ }
+ this.browser.notebook.page_reordered.connect_after (this.tab_reordered);
+ }
+
+ private void helper_duplicate_tab (Midori.View view, Midori.View new_view, Midori.NewView where, bool user_initiated) {
+ unowned Katze.Item item = view.get_proxy_item ();
+ unowned Katze.Item new_item = new_view.get_proxy_item ();
+ int64 tab_id = item.get_meta_integer ("tabby-id");
+ int64 new_tab_id = new_item.get_meta_integer ("tabby-id");
+
+ if (tab_id > 0 && tab_id == new_tab_id) {
+ new_item.set_meta_integer ("tabby-id", 0);
+ }
+ }
+
+ construct {
+ this.tab_sorting = new GLib.SList<double?> ();
}
}
}
namespace Local {
private class Session : Base.Session {
- public static int open_sessions = 0;
public int64 id { get; private set; }
private unowned Sqlite.Database db;
public override void add_item (Katze.Item item) {
GLib.DateTime time = new DateTime.now_local ();
- string sqlcmd = "INSERT INTO `tabs` (`crdate`, `tstamp`, `session_id`, `uri`, `title`) VALUES (:tstamp, :tstamp, :session_id, :uri, :title);";
+ string? sorting = item.get_meta_string ("sorting");
+ string sqlcmd = "INSERT INTO `tabs` (`crdate`, `tstamp`, `session_id`, `uri`, `title`, `sorting`) VALUES (:tstamp, :tstamp, :session_id, :uri, :title, :sorting);";
Sqlite.Statement stmt;
if (this.db.prepare_v2 (sqlcmd, -1, out stmt, null) != Sqlite.OK)
critical (_("Failed to update database: %s"), db.errmsg);
@@ -162,6 +363,11 @@ namespace Tabby {
stmt.bind_int64 (stmt.bind_parameter_index (":session_id"), this.id);
stmt.bind_text (stmt.bind_parameter_index (":uri"), item.uri);
stmt.bind_text (stmt.bind_parameter_index (":title"), item.name);
+ if (sorting == null)
+ stmt.bind_double (stmt.bind_parameter_index (":sorting"), double.parse ("1"));
+ else
+ stmt.bind_double (stmt.bind_parameter_index (":sorting"), double.parse (sorting));
+
if (stmt.step () != Sqlite.DONE)
critical (_("Failed to update database: %s"), db.errmsg);
else {
@@ -202,6 +408,8 @@ namespace Tabby {
unowned Katze.Item item = view.get_proxy_item ();
int64 tab_id = item.get_meta_integer ("tabby-id");
if (tab_id < 1) {
+ double? sorting = this.get_tab_sorting (view);
+ item.set_meta_string ("sorting", sorting.to_string ());
this.add_item (item);
}
}
@@ -220,9 +428,76 @@ namespace Tabby {
critical (_("Failed to update database: %s"), db.errmsg ());
}
+ protected override void tab_switched (Midori.View? old_view, Midori.View? new_view) {
+ GLib.DateTime time = new DateTime.now_local ();
+ unowned Katze.Item item = new_view.get_proxy_item ();
+ int64 tab_id = item.get_meta_integer ("tabby-id");
+ string sqlcmd = "UPDATE `tabs` SET tstamp = :tstamp WHERE session_id = :session_id AND id = :tab_id;";
+ Sqlite.Statement stmt;
+ if (this.db.prepare_v2 (sqlcmd, -1, out stmt, null) != Sqlite.OK)
+ critical (_("Failed to update database: %s"), db.errmsg ());
+ stmt.bind_int64 (stmt.bind_parameter_index (":session_id"), this.id);
+ stmt.bind_int64 (stmt.bind_parameter_index (":tab_id"), tab_id);
+ stmt.bind_int64 (stmt.bind_parameter_index (":tstamp"), time.to_unix ());
+ if (stmt.step () != Sqlite.DONE)
+ critical (_("Failed to update database: %s"), db.errmsg ());
+ }
+
+ protected override void tab_reordered (Gtk.Widget tab, uint pos) {
+ Midori.View view = tab as Midori.View;
+
+ double? sorting = this.get_tab_sorting (view);
+ unowned Katze.Item item = view.get_proxy_item ();
+ int64 tab_id = item.get_meta_integer ("tabby-id");
+ string sqlcmd = "UPDATE `tabs` SET sorting = :sorting WHERE session_id = :session_id AND id = :tab_id;";
+ Sqlite.Statement stmt;
+ if (this.db.prepare_v2 (sqlcmd, -1, out stmt, null) != Sqlite.OK)
+ critical (_("Failed to update database: %s"), db.errmsg ());
+ stmt.bind_int64 (stmt.bind_parameter_index (":session_id"), this.id);
+ stmt.bind_int64 (stmt.bind_parameter_index (":tab_id"), tab_id);
+ stmt.bind_double (stmt.bind_parameter_index (":sorting"), sorting);
+
+ if (stmt.step () != Sqlite.DONE)
+ critical (_("Failed to update database: %s"), db.errmsg ());
+
+ item.set_meta_string ("sorting", sorting.to_string ());
+ }
+
+ public override void remove() {
+ string sqlcmd = "DELETE FROM `tabs` WHERE session_id = :session_id;";
+ Sqlite.Statement stmt;
+ if (this.db.prepare_v2 (sqlcmd, -1, out stmt, null) != Sqlite.OK)
+ critical (_("Failed to update database: %s"), db.errmsg ());
+ stmt.bind_int64 (stmt.bind_parameter_index (":session_id"), this.id);
+
+ if (stmt.step () != Sqlite.DONE)
+ critical (_("Failed to update database: %s"), db.errmsg ());
+
+ sqlcmd = "DELETE FROM `sessions` WHERE id = :session_id;";
+ if (this.db.prepare_v2 (sqlcmd, -1, out stmt, null) != Sqlite.OK)
+ critical (_("Failed to update database: %s"), db.errmsg ());
+ stmt.bind_int64 (stmt.bind_parameter_index (":session_id"), this.id);
+
+ if (stmt.step () != Sqlite.DONE)
+ critical (_("Failed to update database: %s"), db.errmsg ());
+ }
+
public override void close() {
- if (Session.open_sessions == 1)
- return;
+ base.close ();
+
+ bool should_break = true;
+ if (!this.browser.destroy_with_parent) {
+ foreach (Midori.Browser browser in APP.get_browsers ()) {
+ if (browser != this.browser && !browser.destroy_with_parent) {
+ should_break = false;
+ break;
+ }
+ }
+
+ if (should_break) {
+ return;
+ }
+ }
GLib.DateTime time = new DateTime.now_local ();
string sqlcmd = "UPDATE `sessions` SET closed = 1, tstamp = :tstamp WHERE id = :session_id;";
@@ -239,7 +514,7 @@ namespace Tabby {
public override Katze.Array get_tabs() {
Katze.Array tabs = new Katze.Array (typeof (Katze.Item));
- string sqlcmd = "SELECT id, uri, title FROM tabs WHERE session_id = :session_id";
+ string sqlcmd = "SELECT id, uri, title, sorting FROM tabs WHERE session_id = :session_id ORDER BY tstamp DESC";
Sqlite.Statement stmt;
if (this.db.prepare_v2 (sqlcmd, -1, out stmt, null) != Sqlite.OK)
critical (_("Failed to select from database: %s"), db.errmsg ());
@@ -258,6 +533,7 @@ namespace Tabby {
item.uri = uri;
item.name = title;
item.set_meta_integer ("tabby-id", id);
+ item.set_meta_string ("sorting", stmt.column_double (3).to_string ());
tabs.add_item (item);
result = stmt.step ();
}
@@ -265,6 +541,28 @@ namespace Tabby {
return tabs;
}
+ public override double? get_max_sorting () {
+ string sqlcmd = "SELECT MAX(sorting) FROM tabs WHERE session_id = :session_id";
+ Sqlite.Statement stmt;
+ if (this.db.prepare_v2 (sqlcmd, -1, out stmt, null) != Sqlite.OK)
+ critical (_("Failed to select from database: %s"), db.errmsg ());
+ stmt.bind_int64 (stmt.bind_parameter_index (":session_id"), this.id);
+ int result = stmt.step ();
+ if (!(result == Sqlite.DONE || result == Sqlite.ROW)) {
+ critical (_("Failed to select from database: %s"), db.errmsg ());
+ } else if (result == Sqlite.ROW) {
+ double? sorting;
+ string? sorting_string = stmt.column_double (0).to_string ();
+ if (sorting_string != null) { /* we have to use a seperate if condition to avoid a `possibly unassigned local variable` error */
+ if (double.try_parse (sorting_string, out sorting)) {
+ return sorting;
+ }
+ }
+ }
+
+ return double.parse ("0");
+ }
+
internal Session (Sqlite.Database db) {
this.db = db;
@@ -296,15 +594,6 @@ namespace Tabby {
if (stmt.step () != Sqlite.DONE)
critical (_("Failed to update database: %s"), db.errmsg);
}
-
- construct {
- Session.open_sessions++;
- }
-
- ~Session () {
- Session.open_sessions--;
- }
-
}
private class Storage : Base.Storage {
@@ -314,7 +603,12 @@ namespace Tabby {
public override Katze.Array get_sessions () {
Katze.Array sessions = new Katze.Array (typeof (Session));
- string sqlcmd = "SELECT id FROM sessions WHERE closed = 0;";
+ string sqlcmd = """
+ SELECT id, closed FROM sessions WHERE closed = 0
+ UNION
+ SELECT * FROM (SELECT id, closed FROM sessions WHERE closed = 1 ORDER BY tstamp DESC LIMIT 1)
+ ORDER BY closed;
+ """;
Sqlite.Statement stmt;
if (this.db.prepare_v2 (sqlcmd, -1, out stmt, null) != Sqlite.OK)
critical (_("Failed to select from database: %s"), db.errmsg);
@@ -326,10 +620,13 @@ namespace Tabby {
while (result == Sqlite.ROW) {
int64 id = stmt.column_int64 (0);
- sessions.add_item (new Session.with_id (this.db, id));
+ int64 closed = stmt.column_int64 (1);
+ if (closed == 0 || sessions.is_empty ()) {
+ sessions.add_item (new Session.with_id (this.db, id));
+ }
result = stmt.step ();
}
-
+
if (sessions.is_empty ()) {
sessions.add_item (new Session (this.db));
}
@@ -376,10 +673,56 @@ namespace Tabby {
private class Manager : Midori.Extension {
private Base.Storage storage;
private bool load_session () {
- this.storage.restore_last_sessions ();
+ /* Using get here to avoid MidoriMidoriStartup in generated C with Vala 0.20.1 */
+ int load_on_startup;
+ APP.settings.get ("load-on-startup", out load_on_startup);
+ if (load_on_startup == Midori.MidoriStartup.BLANK_PAGE
+ || load_on_startup == Midori.MidoriStartup.HOMEPAGE) {
+ this.storage.start_new_session ();
+ } else {
+ this.storage.restore_last_sessions ();
+ }
+
+ /* FIXME: execute_commands should be called before session creation */
+ GLib.Idle.add (this.execute_commands);
+
return false;
}
+ private bool execute_commands () {
+ Midori.App app = this.get_app ();
+ unowned string?[] commands = app.get_data ("execute-commands");
+
+ if (commands != null) {
+ app.send_command (commands);
+ }
+
+ return false;
+ }
+
+ private void set_open_uris (Midori.Browser browser) {
+ Midori.App app = this.get_app ();
+ unowned string?[] uris = app.get_data ("open-uris");
+
+ if (uris != null) {
+ Katze.Array tabs = new Katze.Array (typeof (Katze.Item));
+
+ for(int i = 0; uris[i] != null; i++) {
+ Katze.Item item = new Katze.Item ();
+ item.name = uris[i];
+ item.uri = Midori.Sokoke.magic_uri (uris[i], true, true);
+ if (item.uri != null) {
+ tabs.add_item (item);
+ }
+ }
+ if (!tabs.is_empty()) {
+ browser.set_data ("tabby-open-uris", tabs);
+ }
+ }
+
+ app.add_browser.disconnect (this.set_open_uris);
+ }
+
private void browser_added (Midori.Browser browser) {
Base.Session session = browser.get_data<Base.Session> ("tabby-session");
if (session == null) {
@@ -395,15 +738,35 @@ namespace Tabby {
GLib.warning ("missing session");
} else {
session.close ();
+
+ /* Using get here to avoid MidoriMidoriStartup in generated C with Vala 0.20.1 */
+ int load_on_startup;
+ APP.settings.get ("load-on-startup", out load_on_startup);
+
+ if (browser.destroy_with_parent
+ || load_on_startup < Midori.MidoriStartup.LAST_OPEN_PAGES) {
+ /* Remove js popups and close if not restoring on startup */
+ session.remove ();
+ }
}
}
private void activated (Midori.App app) {
+ APP = app;
+ unowned string? restore_count = GLib.Environment.get_variable ("TABBY_RESTORE_COUNT");
+ if (restore_count != null) {
+ int count = int.parse (restore_count);
+ if (count >= 1) {
+ IDLE_RESTORE_COUNT = count;
+ }
+ }
+
/* FixMe: provide an option to replace Local.Storage with IStorage based Objects */
this.storage = new Local.Storage (this.get_app ()) as Base.Storage;
- app.add_browser.connect (browser_added);
- app.remove_browser.connect (browser_removed);
+ app.add_browser.connect (this.set_open_uris);
+ app.add_browser.connect (this.browser_added);
+ app.remove_browser.connect (this.browser_removed);
GLib.Idle.add (this.load_session);
}
@@ -414,7 +777,7 @@ namespace Tabby {
version: "0.1",
authors: "André Stösel <andre@stoesel.de>");
- activate.connect (this.activated);
+ this.activate.connect (this.activated);
}
}
}
diff --git a/extensions/transfers.vala b/extensions/transfers.vala
index bf1623a5..5b6ad425 100644
--- a/extensions/transfers.vala
+++ b/extensions/transfers.vala
@@ -174,8 +174,13 @@ namespace Transfers {
Transfer transfer;
store.get (iter, 0, out transfer);
- if (Midori.Download.action_clear (transfer.download, treeview))
- transfer.remove ();
+ try {
+ if (Midori.Download.action_clear (transfer.download, treeview))
+ transfer.remove ();
+ } catch (Error error) {
+ // Failure to open is the only known possibility here
+ GLib.warning (_("Failed to open download: %s"), error.message);
+ }
}
}
@@ -198,15 +203,23 @@ namespace Transfers {
var menu = new Gtk.Menu ();
var menuitem = new Gtk.ImageMenuItem.from_stock (Gtk.STOCK_OPEN, null);
menuitem.activate.connect (() => {
- Midori.Download.open (transfer.download, treeview);
+ try {
+ Midori.Download.open (transfer.download, treeview);
+ } catch (Error error_open) {
+ GLib.warning (_("Failed to open download: %s"), error_open.message);
+ }
});
menuitem.sensitive = transfer.succeeded;
menu.append (menuitem);
menuitem = new Gtk.ImageMenuItem.with_mnemonic (_("Open Destination _Folder"));
menuitem.image = new Gtk.Image.from_stock (Gtk.STOCK_DIRECTORY, Gtk.IconSize.MENU);
menuitem.activate.connect (() => {
- var folder = GLib.File.new_for_uri (transfer.destination);
- Sokoke.show_uri (get_screen (), folder.get_parent ().get_uri (), 0);
+ try {
+ var folder = GLib.File.new_for_uri (transfer.destination);
+ Sokoke.show_uri (get_screen (), folder.get_parent ().get_uri (), 0);
+ } catch (Error error_folder) {
+ GLib.warning (_("Failed to open download: %s"), error_folder.message);
+ }
});
menu.append (menuitem);
menuitem = new Gtk.ImageMenuItem.with_mnemonic (_("Copy Link Loc_ation"));
@@ -312,7 +325,7 @@ namespace Transfers {
progress.show_text = true;
#endif
progress.ellipsize = Pango.EllipsizeMode.MIDDLE;
- string filename = Path.get_basename (transfer.destination);
+ string filename = Midori.Download.get_basename_for_display (transfer.destination);
progress.text = filename;
int width;
Sokoke.widget_get_text_size (progress, "M", out width, null);
@@ -336,8 +349,13 @@ namespace Transfers {
}
void button_clicked () {
- if (Midori.Download.action_clear (transfer.download, button))
- transfer.remove ();
+ try {
+ if (Midori.Download.action_clear (transfer.download, button))
+ transfer.remove ();
+ } catch (Error error) {
+ // Failure to open is the only known possibility here
+ GLib.warning (_("Failed to open download: %s"), error.message);
+ }
}
void transfer_changed () {
@@ -441,12 +459,17 @@ namespace Transfers {
if (transfer.succeeded) {
/* FIXME: The following 2 blocks ought to be done in core */
if (transfer.action == Midori.DownloadType.OPEN) {
- if (Midori.Download.action_clear (transfer.download, widgets.nth_data (0)))
- transfer.remove ();
+ try {
+ if (Midori.Download.action_clear (transfer.download, widgets.nth_data (0)))
+ transfer.remove ();
+ } catch (Error error) {
+ // Failure to open is the only known possibility here
+ GLib.warning (_("Failed to open download: %s"), error.message);
+ }
}
string uri = transfer.destination;
- string filename = Path.get_basename (uri);
+ string filename = Midori.Download.get_basename_for_display (uri);
var item = new Katze.Item ();
item.uri = uri;
item.name = filename;
diff --git a/extensions/wscript_build b/extensions/wscript_build
deleted file mode 100644
index 1ba8aea5..00000000
--- a/extensions/wscript_build
+++ /dev/null
@@ -1,62 +0,0 @@
-#! /usr/bin/env python
-# WAF build script for midori
-# This file is licensed under the terms of the expat license, see the file EXPAT.
-
-import Options
-import os
-
-extensions = os.listdir ('extensions')
-for extension in extensions:
- # FIXME In the absense of a proper mechanism, transfers is a stock extension
- if not bld.env['addons'] and extension != 'transfers.vala':
- continue
-
- folder = 'extensions' + os.sep + extension
- if os.path.isdir (folder):
- files = os.listdir (folder)
- target = extension
- source = ''
- for fila in files:
- if fila[-2:] == '.c' or fila[-5:] == '.vala':
- source += ' ' + extension + os.sep + fila
- if not source:
- Utils.pprint ('RED', folder + ': No source files found')
- continue
- else:
- if extension[-2:] == '.c':
- target = extension[:-2]
- elif extension[-5:] == '.vala':
- target = extension[:-5]
- else:
- continue
- source = extension
-
- # FIXME
- if bld.env['HAVE_WEBKIT2'] and target in ['external-download-manager', 'nsplugin-manager', 'formhistory', 'adblock', 'cookie-permissions', 'addons', 'nojs']:
- continue
-
- obj = bld.new_task_gen ('cc', 'shlib')
- obj.target = target
- obj.includes = '.. ../katze ../midori'
- obj.source = source
- obj.uselib = 'UNIQUE LIBSOUP GIO GTK SQLITE WEBKIT LIBXML GRANITE'
- if 'vala' in source:
- obj.env.append_value ('CCFLAGS', '-w')
- obj.vapi_dirs = '../midori ../katze'
- obj.packages = 'glib-2.0 gio-2.0 libsoup-2.4 sqlite3 midori midori-core katze'
- if bld.env['HAVE_GTK3']:
- obj.packages += ' gtk+-3.0'
- else:
- obj.packages += ' gtk+-2.0'
- if bld.env['HAVE_WEBKIT2']:
- obj.packages += ' webkit2gtk-3.0'
- else:
- obj.packages += ' webkitgtk-3.0'
- if bld.env['HAVE_GRANITE']:
- obj.packages += ' granite'
- if bld.env['platform'] != 'win32':
- obj.packages += ' linux'
- obj.install_path = '${LIBDIR}/midori'
- # See LINKFLAGS in wscript: w/ o it we get several "undefined reference" errors
- if bld.env['platform'] == 'win32':
- obj.uselib_local = 'midori'
diff --git a/icons/wscript_build b/icons/wscript_build
deleted file mode 100644
index 4e2345c9..00000000
--- a/icons/wscript_build
+++ /dev/null
@@ -1,44 +0,0 @@
-#! /usr/bin/env python
-# WAF build script for midori
-# This file is licensed under the terms of the expat license, see the file EXPAT.
-
-import Utils
-import os
-
-def add_image (bld, category, name):
-
- srcdir = os.getcwd ()
- blddir = bld.bdir
-
- rsvg_convert = bld.env['RSVG_CONVERT']
-
- if rsvg_convert:
- Utils.check_dir (blddir + '/icons')
-
- icon_sizes = [16, 22, 24, 32, 48]
-
- for size in icon_sizes:
- format = str (size) + 'x' + str (size)
- if os.access (srcdir + '/icons/' + format + '/' + name + '.png', os.F_OK):
- bld.install_files ('${MDATADIR}/icons/hicolor/' + format + '/' + category,
- srcdir + '/icons/' + format + '/' + name + '.png')
- elif not rsvg_convert:
- pass
- elif os.access (srcdir + '/icons/scalable/' + name + '.svg', os.F_OK):
- Utils.check_dir (blddir + '/icons/' + format)
- command = rsvg_convert + ' -w ' + str(size) + \
- ' -h ' + str(size) + \
- ' -o ' + blddir + '/icons/' + format + '/' + name + '.png' + \
- ' ' + srcdir + '/icons/scalable/' + name + '.svg'
- if not Utils.exec_command (command):
- bld.install_files ('${MDATADIR}/icons/hicolor/' + format + '/' + category,
- blddir + '/icons/' + format + '/' + name + '.png')
- else:
- Utils.pprint ('BLUE', "Optimized icons could not be created.")
- break
- bld.install_files ('${MDATADIR}/icons/hicolor/scalable/' + category,
- srcdir + '/icons/scalable/' + name + '.svg')
-
-add_image (bld, 'categories', 'extension')
-add_image (bld, 'apps', 'midori')
-add_image (bld, 'status', 'internet-news-reader')
diff --git a/katze/katze-array.c b/katze/katze-array.c
index 2bfb12e5..9eb40e7e 100644
--- a/katze/katze-array.c
+++ b/katze/katze-array.c
@@ -371,7 +371,7 @@ gpointer
katze_array_find_token (KatzeArray* array,
const gchar* token)
{
- goffset token_length;
+ size_t token_length;
GList* items;
g_return_val_if_fail (KATZE_IS_ARRAY (array), NULL);
diff --git a/katze/katze-cellrenderercomboboxtext.c b/katze/katze-cellrenderercomboboxtext.c
index 390086d4..161e9ce4 100644
--- a/katze/katze-cellrenderercomboboxtext.c
+++ b/katze/katze-cellrenderercomboboxtext.c
@@ -67,34 +67,6 @@ katze_cell_renderer_combobox_text_render (GtkCellRenderer *cell,
GtkCellRendererState flags);
#endif
-static void
-(*_cell_renderer_get_size) (GtkCellRenderer* cell,
- GtkWidget* widget,
- GdkRectangle* cell_area,
- gint* x_offset,
- gint* y_offset,
- gint* width,
- gint* height);
-
-#if GTK_CHECK_VERSION(3,0,0)
-static void
-(*_cell_renderer_render) (GtkCellRenderer *cell,
- cairo_t* cr,
- GtkWidget *widget,
- GdkRectangle *background_area,
- GdkRectangle *cell_area,
- GtkCellRendererState flags) = NULL;
-#else
-static void
-(*_cell_renderer_render) (GtkCellRenderer *cell,
- GdkDrawable *window,
- GtkWidget *widget,
- GdkRectangle *background_area,
- GdkRectangle *cell_area,
- GdkRectangle *expose_area,
- GtkCellRendererState flags) = NULL;
-#endif
-
enum {
PROP_0,
diff --git a/katze/katze-preferences.c b/katze/katze-preferences.c
index f43bb951..ca28e7b5 100644
--- a/katze/katze-preferences.c
+++ b/katze/katze-preferences.c
@@ -15,13 +15,6 @@
#include <config.h>
#endif
-#ifdef HAVE_GRANITE
- #if HAVE_OSX
- #error FIXME granite on OSX is not implemented
- #endif
- #include <granite.h>
-#endif
-
#include <string.h>
#include <glib/gi18n.h>
@@ -151,12 +144,7 @@ katze_preferences_prepare (KatzePreferences* preferences)
{
KatzePreferencesPrivate* priv = preferences->priv;
- #ifdef HAVE_GRANITE
- /* FIXME: granite: should return GtkWidget* like GTK+ */
- priv->notebook = (GtkWidget*)granite_widgets_static_notebook_new (FALSE);
- #else
priv->notebook = gtk_notebook_new ();
- #endif
gtk_container_set_border_width (GTK_CONTAINER (priv->notebook), 6);
#if HAVE_OSX
@@ -231,14 +219,8 @@ katze_preferences_add_category (KatzePreferences* preferences,
priv->sizegroup = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
gtk_widget_show (priv->page);
gtk_container_set_border_width (GTK_CONTAINER (priv->page), 4);
- #ifdef HAVE_GRANITE
- granite_widgets_static_notebook_append_page (
- GRANITE_WIDGETS_STATIC_NOTEBOOK (priv->notebook),
- priv->page, GTK_LABEL (gtk_label_new (label)));
- #else
gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook),
priv->page, gtk_label_new (label));
- #endif
#if HAVE_OSX
priv->toolbutton = GTK_WIDGET (priv->toolbutton ?
gtk_radio_tool_button_new_from_widget (
diff --git a/katze/katze-throbber.c b/katze/katze-throbber.c
deleted file mode 100644
index 5e063106..00000000
--- a/katze/katze-throbber.c
+++ /dev/null
@@ -1,932 +0,0 @@
-/*
- Copyright (C) 2007-2010 Christian Dywan <christian@twotoasts.de>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- See the file COPYING for the full license text.
-*/
-
-#include "katze-throbber.h"
-
-#include "katze-utils.h"
-
-#include <glib/gi18n.h>
-#include <math.h>
-
-struct _KatzeThrobber
-{
- GtkSpinner parent_instance;
- GtkIconSize icon_size;
- gchar* icon_name;
- GdkPixbuf* pixbuf;
- gchar* stock_id;
- gboolean animated;
- gchar* static_icon_name;
- GdkPixbuf* static_pixbuf;
- gchar* static_stock_id;
-
- gint index;
- gint timer_id;
- gint width;
- gint height;
-};
-
-struct _KatzeThrobberClass
-{
- GtkSpinnerClass parent_class;
-};
-
-G_DEFINE_TYPE (KatzeThrobber, katze_throbber, GTK_TYPE_SPINNER);
-
-enum
-{
- PROP_0,
-
- PROP_ICON_SIZE,
- PROP_ICON_NAME,
- PROP_PIXBUF,
- PROP_ANIMATED,
- PROP_STATIC_ICON_NAME,
- PROP_STATIC_PIXBUF,
- PROP_STATIC_STOCK_ID
-};
-
-static void
-katze_throbber_dispose (GObject* object);
-
-static void
-katze_throbber_set_property (GObject* object,
- guint prop_id,
- const GValue* value,
- GParamSpec* pspec);
-
-static void
-katze_throbber_get_property (GObject* object,
- guint prop_id,
- GValue* value,
- GParamSpec* pspec);
-
-static void
-#if GTK_CHECK_VERSION (3, 0, 0)
-katze_throbber_destroy (GtkWidget* object);
-#else
-katze_throbber_destroy (GtkObject* object);
-#endif
-
-static void
-katze_throbber_realize (GtkWidget* widget);
-
-#if GTK_CHECK_VERSION (3, 0, 0)
-static void
-katze_throbber_get_preferred_height (GtkWidget *widget,
- gint *minimal_height,
- gint *natural_height);
-static void
-katze_throbber_get_preferred_width (GtkWidget *widget,
- gint *minimal_width,
- gint *natural_width);
-#endif
-static void
-katze_throbber_unrealize (GtkWidget* widget);
-
-static void
-katze_throbber_map (GtkWidget* widget);
-
-static void
-katze_throbber_unmap (GtkWidget* widget);
-
-static void
-katze_throbber_style_set (GtkWidget* widget,
- GtkStyle* style);
-
-static void
-katze_throbber_screen_changed (GtkWidget* widget,
- GdkScreen* screen_prev);
-
-static void
-katze_throbber_size_request (GtkWidget* widget,
- GtkRequisition* requisition);
-
-static gboolean
-katze_throbber_expose_event (GtkWidget* widget,
-#if GTK_CHECK_VERSION (3, 0, 0)
- cairo_t* cr);
-#else
- GdkEventExpose* event);
-#endif
-
-static void
-icon_theme_changed (KatzeThrobber* throbber);
-
-static void
-katze_throbber_class_init (KatzeThrobberClass* class)
-{
- GObjectClass* gobject_class;
-#if !GTK_CHECK_VERSION (3, 0, 0)
- GtkObjectClass* object_class;
-#endif
- GtkWidgetClass* widget_class;
- GParamFlags flags = G_PARAM_READWRITE | G_PARAM_CONSTRUCT;
-
- gobject_class = G_OBJECT_CLASS (class);
- gobject_class->dispose = katze_throbber_dispose;
- gobject_class->set_property = katze_throbber_set_property;
- gobject_class->get_property = katze_throbber_get_property;
-
- widget_class = GTK_WIDGET_CLASS (class);
-#if GTK_CHECK_VERSION (3, 0, 0)
- widget_class->destroy = katze_throbber_destroy;
-#else
- object_class = GTK_OBJECT_CLASS (class);
- object_class->destroy = katze_throbber_destroy;
-#endif
- widget_class->realize = katze_throbber_realize;
- widget_class->unrealize = katze_throbber_unrealize;
- widget_class->map = katze_throbber_map;
- widget_class->unmap = katze_throbber_unmap;
- widget_class->style_set = katze_throbber_style_set;
- widget_class->screen_changed = katze_throbber_screen_changed;
-#if GTK_CHECK_VERSION (3, 0, 0)
- widget_class->get_preferred_width= katze_throbber_get_preferred_width;
- widget_class->get_preferred_height= katze_throbber_get_preferred_height;
-#else
- widget_class->size_request = katze_throbber_size_request;
-#endif
-#if GTK_CHECK_VERSION (3, 0, 0)
- widget_class->draw = katze_throbber_expose_event;
-#else
- widget_class->expose_event = katze_throbber_expose_event;
-#endif
- g_object_class_install_property (gobject_class,
- PROP_ICON_SIZE,
- g_param_spec_int (
- "icon-size",
- "Icon size",
- "Symbolic size to use for the animation",
- 0, G_MAXINT, GTK_ICON_SIZE_MENU,
- flags));
-
- g_object_class_install_property (gobject_class,
- PROP_ICON_NAME,
- g_param_spec_string (
- "icon-name",
- "Icon Name",
- "The name of an icon containing animation frames",
- "process-working",
- flags));
-
- g_object_class_install_property (gobject_class,
- PROP_PIXBUF,
- g_param_spec_object (
- "pixbuf",
- "Pixbuf",
- "A GdkPixbuf containing animation frames",
- GDK_TYPE_PIXBUF,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class,
- PROP_ANIMATED,
- g_param_spec_boolean (
- "animated",
- "Animated",
- "Whether the throbber should be animated",
- FALSE,
- flags));
-
- g_object_class_install_property (gobject_class,
- PROP_STATIC_ICON_NAME,
- g_param_spec_string (
- "static-icon-name",
- "Static Icon Name",
- "The name of an icon to be used as the static image",
- NULL,
- flags));
-
- g_object_class_install_property (gobject_class,
- PROP_STATIC_PIXBUF,
- g_param_spec_object (
- "static-pixbuf",
- "Static Pixbuf",
- "A GdkPixbuf to be used as the static image",
- GDK_TYPE_PIXBUF,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class,
- PROP_STATIC_STOCK_ID,
- g_param_spec_string (
- "static-stock-id",
- "Static Stock ID",
- "The stock ID of an icon to be used as the static image",
- NULL,
- flags));
-}
-
-static void
-katze_throbber_init (KatzeThrobber *throbber)
-{
- gtk_widget_set_has_window (GTK_WIDGET (throbber), FALSE);
-
- throbber->timer_id = -1;
-}
-
-static void
-katze_throbber_dispose (GObject* object)
-{
- KatzeThrobber* throbber = KATZE_THROBBER (object);
-
- if (G_UNLIKELY (throbber->timer_id >= 0))
- g_source_remove (throbber->timer_id);
-
- (*G_OBJECT_CLASS (katze_throbber_parent_class)->dispose) (object);
-}
-
-static void
-#if GTK_CHECK_VERSION (3, 0, 0)
-katze_throbber_destroy (GtkWidget* object)
-#else
-katze_throbber_destroy (GtkObject* object)
-#endif
-{
- KatzeThrobber* throbber = KATZE_THROBBER (object);
-
- katze_assign (throbber->icon_name, NULL);
- katze_object_assign (throbber->pixbuf, NULL);
- katze_assign (throbber->static_icon_name, NULL);
- katze_object_assign (throbber->static_pixbuf, NULL);
- katze_assign (throbber->static_stock_id, NULL);
-#if GTK_CHECK_VERSION (3, 0, 0)
- GTK_WIDGET_CLASS (katze_throbber_parent_class)->destroy (object);
-#else
- GTK_OBJECT_CLASS (katze_throbber_parent_class)->destroy (object);
-#endif
-}
-
-static void
-katze_throbber_set_property (GObject* object,
- guint prop_id,
- const GValue* value,
- GParamSpec* pspec)
-{
- KatzeThrobber* throbber = KATZE_THROBBER (object);
-
- switch (prop_id)
- {
- case PROP_ICON_SIZE:
- katze_throbber_set_icon_size (throbber, g_value_get_int (value));
- break;
- case PROP_ICON_NAME:
- katze_throbber_set_icon_name (throbber, g_value_get_string (value));
- break;
- case PROP_PIXBUF:
- katze_throbber_set_pixbuf (throbber, g_value_get_object (value));
- break;
- case PROP_ANIMATED:
- katze_throbber_set_animated (throbber, g_value_get_boolean (value));
- break;
- case PROP_STATIC_ICON_NAME:
- katze_throbber_set_static_icon_name (throbber, g_value_get_string (value));
- break;
- case PROP_STATIC_PIXBUF:
- katze_throbber_set_static_pixbuf (throbber, g_value_get_object (value));
- break;
- case PROP_STATIC_STOCK_ID:
- katze_throbber_set_static_stock_id (throbber, g_value_get_string (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-katze_throbber_get_property (GObject* object,
- guint prop_id,
- GValue* value,
- GParamSpec* pspec)
-{
- KatzeThrobber* throbber = KATZE_THROBBER (object);
-
- switch (prop_id)
- {
- case PROP_ICON_SIZE:
- g_value_set_int (value, katze_throbber_get_icon_size (throbber));
- break;
- case PROP_ICON_NAME:
- g_value_set_string (value, katze_throbber_get_icon_name (throbber));
- break;
- case PROP_PIXBUF:
- g_value_set_object (value, katze_throbber_get_pixbuf (throbber));
- break;
- case PROP_ANIMATED:
- g_value_set_boolean (value, katze_throbber_get_animated (throbber));
- break;
- case PROP_STATIC_ICON_NAME:
- g_value_set_string (value, katze_throbber_get_static_icon_name (throbber));
- break;
- case PROP_STATIC_PIXBUF:
- g_value_set_object (value, katze_throbber_get_static_pixbuf (throbber));
- break;
- case PROP_STATIC_STOCK_ID:
- g_value_set_string (value, katze_throbber_get_static_stock_id (throbber));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-/**
- * katze_throbber_new:
- *
- * Creates a new throbber widget.
- *
- * Return value: a new #KatzeThrobber
- **/
-GtkWidget*
-katze_throbber_new (void)
-{
- KatzeThrobber* throbber = g_object_new (KATZE_TYPE_THROBBER,
- NULL);
-
- return GTK_WIDGET (throbber);
-}
-
-/**
- * katze_throbber_set_icon_size:
- * @throbber: a #KatzeThrobber
- * @icon_size: the new icon size
- *
- * Sets the desired size of the throbber image. The animation and static image
- * will be displayed in this size. If a pixbuf is used for the animation every
- * single frame is assumed to have this size.
- **/
-void
-katze_throbber_set_icon_size (KatzeThrobber* throbber,
- GtkIconSize icon_size)
-{
- GtkSettings* gtk_settings;
-
- g_return_if_fail (KATZE_IS_THROBBER (throbber));
- gtk_settings = gtk_widget_get_settings (GTK_WIDGET (throbber));
- g_return_if_fail (gtk_icon_size_lookup_for_settings (gtk_settings,
- icon_size,
- &throbber->width,
- &throbber->height));
-
- throbber->icon_size = icon_size;
-
- g_object_notify (G_OBJECT (throbber), "icon-size");
-
- gtk_widget_queue_draw (GTK_WIDGET (throbber));
-}
-
-/**
- * katze_throbber_set_icon_name:
- * @throbber: a #KatzeThrobber
- * @icon_name: an icon name or %NULL
- *
- * Sets the name of an icon that should provide the animation frames.
- *
- * The pixbuf is automatically invalidated.
- **/
-void
-katze_throbber_set_icon_name (KatzeThrobber* throbber,
- const gchar* icon_name)
-{
- g_return_if_fail (KATZE_IS_THROBBER (throbber));
-
- katze_assign (throbber->icon_name, g_strdup (icon_name));
-
- if (icon_name)
- icon_theme_changed (throbber);
-
- g_object_notify (G_OBJECT (throbber), "icon-name");
-}
-
-/**
- * katze_throbber_set_pixbuf:
- * @throbber: a #KatzeThrobber
- * @pixbuf: a #GdkPixbuf or %NULL
- *
- * Sets the pixbuf that should provide the animation frames. Every frame
- * is assumed to have the icon size of the throbber, which can be specified
- * with katze_throbber_set_icon_size ().
- *
- * The icon name is automatically invalidated.
- **/
-void
-katze_throbber_set_pixbuf (KatzeThrobber* throbber,
- GdkPixbuf* pixbuf)
-{
- g_return_if_fail (KATZE_IS_THROBBER (throbber));
- g_return_if_fail (!pixbuf || GDK_IS_PIXBUF (pixbuf));
-
- katze_object_assign (throbber->pixbuf, pixbuf);
-
- g_object_freeze_notify (G_OBJECT (throbber));
-
- if (pixbuf)
- {
- g_object_ref (pixbuf);
-
- katze_assign (throbber->icon_name, NULL);
- g_object_notify (G_OBJECT (throbber), "icon-name");
- }
-
- gtk_widget_queue_draw (GTK_WIDGET (throbber));
-
- g_object_notify (G_OBJECT (throbber), "pixbuf");
- g_object_thaw_notify (G_OBJECT (throbber));
-}
-
-/**
- * katze_throbber_set_animated:
- * @throbber: a #KatzeThrobber
- * @animated: %TRUE to animate the throbber
- *
- * Sets the animation state of the throbber.
- **/
-void
-katze_throbber_set_animated (KatzeThrobber* throbber,
- gboolean animated)
-{
- g_return_if_fail (KATZE_IS_THROBBER (throbber));
-
- if (G_UNLIKELY (throbber->animated == animated))
- return;
-
- throbber->animated = animated;
-
- g_object_set (throbber, "active", animated, NULL);
- gtk_widget_queue_draw (GTK_WIDGET (throbber));
-
- g_object_notify (G_OBJECT (throbber), "animated");
-}
-
-/**
- * katze_throbber_set_static_icon_name:
- * @throbber: a #KatzeThrobber
- * @icon_name: an icon name or %NULL
- *
- * Sets the name of an icon that should provide the static image.
- *
- * The static pixbuf and stock ID are automatically invalidated.
- **/
-void
-katze_throbber_set_static_icon_name (KatzeThrobber* throbber,
- const gchar* icon_name)
-{
- g_return_if_fail (KATZE_IS_THROBBER (throbber));
-
- katze_assign (throbber->static_icon_name, g_strdup (icon_name));
-
- g_object_freeze_notify (G_OBJECT (throbber));
-
- if (icon_name)
- {
- katze_assign (throbber->static_stock_id, NULL);
-
- icon_theme_changed (throbber);
-
- g_object_notify (G_OBJECT (throbber), "static-pixbuf");
- g_object_notify (G_OBJECT (throbber), "static-stock-id");
- }
-
- g_object_notify (G_OBJECT (throbber), "static-icon-name");
- g_object_thaw_notify (G_OBJECT (throbber));
-}
-
-/**
- * katze_throbber_set_static_pixbuf:
- * @throbber: a #KatzeThrobber
- * @pixbuf: a #GdkPixbuf or %NULL
- *
- * Sets the pixbuf that should provide the static image. The pixbuf is
- * assumed to have the icon size of the throbber, which can be specified
- * with katze_throbber_set_icon_size ().
- *
- * The static icon name and stock ID are automatically invalidated.
- **/
-void
-katze_throbber_set_static_pixbuf (KatzeThrobber* throbber,
- GdkPixbuf* pixbuf)
-{
- g_return_if_fail (KATZE_IS_THROBBER (throbber));
- g_return_if_fail (pixbuf == NULL || GDK_IS_PIXBUF (pixbuf));
-
- katze_object_assign (throbber->static_pixbuf, pixbuf);
-
- g_object_freeze_notify (G_OBJECT (throbber));
-
- if (pixbuf)
- {
- g_object_ref (pixbuf);
-
- katze_assign (throbber->static_icon_name, NULL);
- katze_assign (throbber->static_stock_id, NULL);
-
- gtk_widget_queue_draw (GTK_WIDGET (throbber));
-
- g_object_notify (G_OBJECT (throbber), "static-icon-name");
- g_object_notify (G_OBJECT (throbber), "static-stock-id");
- }
-
- g_object_notify (G_OBJECT (throbber), "static-pixbuf");
- g_object_thaw_notify (G_OBJECT (throbber));
-}
-
-/**
- * katze_throbber_set_static_stock_id:
- * @throbber: a #KatzeThrobber
- * @stock_id: a stock ID or %NULL
- *
- * Sets the stock ID of an icon that should provide the static image.
- *
- * The static icon name and pixbuf are automatically invalidated.
- **/
-void
-katze_throbber_set_static_stock_id (KatzeThrobber* throbber,
- const gchar* stock_id)
-{
- g_return_if_fail (KATZE_IS_THROBBER (throbber));
-
- g_object_freeze_notify (G_OBJECT (throbber));
-
- if (stock_id)
- {
- GtkStockItem stock_item;
- g_return_if_fail (gtk_stock_lookup (stock_id, &stock_item));
-
- g_object_notify (G_OBJECT (throbber), "static-icon-name");
- g_object_notify (G_OBJECT (throbber), "static-pixbuf");
- }
-
- katze_assign (throbber->static_stock_id, g_strdup (stock_id));
-
- if (stock_id)
- icon_theme_changed (throbber);
-
- g_object_notify (G_OBJECT (throbber), "static-stock-id");
- g_object_thaw_notify (G_OBJECT (throbber));
-}
-
-/**
- * katze_throbber_get_icon_size:
- * @throbber: a #KatzeThrobber
- *
- * Retrieves the size of the throbber.
- *
- * Return value: the size of the throbber
- **/
-GtkIconSize
-katze_throbber_get_icon_size (KatzeThrobber* throbber)
-{
- g_return_val_if_fail (KATZE_IS_THROBBER (throbber), GTK_ICON_SIZE_INVALID);
-
- return throbber->icon_size;
-}
-
-/**
- * katze_throbber_get_icon_name:
- * @throbber: a #KatzeThrobber
- *
- * Retrieves the name of the icon providing the animation frames.
- *
- * Return value: the name of the icon providing the animation frames, or %NULL
- **/
-const gchar*
-katze_throbber_get_icon_name (KatzeThrobber* throbber)
-{
- g_return_val_if_fail (KATZE_IS_THROBBER (throbber), NULL);
-
- return throbber->icon_name;
-}
-
-/**
- * katze_throbber_get_pixbuf:
- * @throbber: a #KatzeThrobber
- *
- * Retrieves the #GdkPixbuf providing the animation frames if an icon name
- * or pixbuf is available. The caller of this function does not own a
- * reference to the returned pixbuf.
- *
- * Return value: the pixbuf providing the animation frames, or %NULL
- **/
-GdkPixbuf*
-katze_throbber_get_pixbuf (KatzeThrobber* throbber)
-{
- g_return_val_if_fail (KATZE_IS_THROBBER (throbber), NULL);
-
- return throbber->pixbuf;
-}
-
-/**
- * katze_throbber_get_animated:
- * @throbber: a #KatzeThrobber
- *
- * Retrieves the status of the animation, whcih can be animated or static.
- *
- * Return value: %TRUE if the throbber is animated
- **/
-gboolean
-katze_throbber_get_animated (KatzeThrobber* throbber)
-{
- g_return_val_if_fail (KATZE_IS_THROBBER (throbber), FALSE);
-
- return throbber->animated;
-}
-
-/**
- * katze_throbber_get_static_icon_name:
- * @throbber: a #KatzeThrobber
- *
- * Retrieves the name of the icon providing the static image, if an icon name
- * for the static image was specified.
- *
- * Return value: the name of the icon providing the static image, or %NULL
- **/
-const gchar*
-katze_throbber_get_static_icon_name (KatzeThrobber* throbber)
-{
- g_return_val_if_fail (KATZE_IS_THROBBER (throbber), NULL);
-
- return throbber->static_icon_name;
-}
-
-/**
- * katze_throbber_get_static pixbuf:
- * @throbber: a #KatzeThrobber
- *
- * Retrieves the #GdkPixbuf providing the static image, if an icon name, a
- * pixbuf or a stock ID for the static image was specified. The caller of this
- * function does not own a reference to the returned pixbuf.
- *
- * Return value: the pixbuf providing the static image, or %NULL
- **/
-GdkPixbuf*
-katze_throbber_get_static_pixbuf (KatzeThrobber* throbber)
-{
- g_return_val_if_fail (KATZE_IS_THROBBER (throbber), NULL);
-
- return throbber->static_pixbuf;
-}
-
-/**
- * katze_throbber_get_static_stock_id:
- * @throbber: a #KatzeThrobber
- *
- * Retrieves the stock ID of the icon providing the static image, if a
- * stock ID for the static image was specified.
- *
- * Return value: the stock ID of the icon providing the static image, or %NULL
- **/
-const gchar*
-katze_throbber_get_static_stock_id (KatzeThrobber* throbber)
-{
- g_return_val_if_fail (KATZE_IS_THROBBER (throbber), NULL);
-
- return throbber->static_stock_id;
-}
-
-static void
-katze_throbber_realize (GtkWidget* widget)
-{
- (*GTK_WIDGET_CLASS (katze_throbber_parent_class)->realize) (widget);
-
- icon_theme_changed (KATZE_THROBBER (widget));
-}
-
-static void
-katze_throbber_unrealize (GtkWidget* widget)
-{
- if (GTK_WIDGET_CLASS (katze_throbber_parent_class)->unrealize)
- GTK_WIDGET_CLASS (katze_throbber_parent_class)->unrealize (widget);
-}
-
-static void
-pixbuf_assign_icon (GdkPixbuf** pixbuf,
- const gchar* icon_name,
- KatzeThrobber* throbber)
-{
- GdkScreen* screen;
- GtkIconTheme* icon_theme;
-
- if (*pixbuf)
- g_object_unref (*pixbuf);
-
- screen = gtk_widget_get_screen (GTK_WIDGET (throbber));
- icon_theme = gtk_icon_theme_get_for_screen (screen);
- *pixbuf = gtk_icon_theme_load_icon (icon_theme,
- icon_name,
- MAX (throbber->width, throbber->height),
- (GtkIconLookupFlags) 0,
- NULL);
-}
-
-static void
-icon_theme_changed (KatzeThrobber* throbber)
-{
- if (throbber->icon_name)
- pixbuf_assign_icon (&throbber->pixbuf,
- throbber->icon_name, throbber);
-
- if (throbber->static_icon_name)
- pixbuf_assign_icon (&throbber->static_pixbuf,
- throbber->static_icon_name, throbber);
- else if (throbber->static_stock_id)
- katze_object_assign (throbber->static_pixbuf,
- gtk_widget_render_icon (GTK_WIDGET (throbber),
- throbber->static_stock_id,
- throbber->icon_size,
- NULL));
-
- g_object_freeze_notify (G_OBJECT (throbber));
- g_object_notify (G_OBJECT (throbber), "pixbuf");
- g_object_notify (G_OBJECT (throbber), "static-pixbuf");
- g_object_thaw_notify (G_OBJECT (throbber));
-
- gtk_widget_queue_draw (GTK_WIDGET (throbber));
-}
-
-static void
-katze_throbber_map (GtkWidget* widget)
-{
- (*GTK_WIDGET_CLASS (katze_throbber_parent_class)->map) (widget);
-}
-
-static void
-katze_throbber_unmap (GtkWidget* widget)
-{
- if (GTK_WIDGET_CLASS (katze_throbber_parent_class)->unmap)
- GTK_WIDGET_CLASS (katze_throbber_parent_class)->unmap (widget);
-}
-
-static void
-katze_throbber_style_set (GtkWidget* widget,
- GtkStyle* prev_style)
-{
- if (GTK_WIDGET_CLASS (katze_throbber_parent_class)->style_set)
- GTK_WIDGET_CLASS (katze_throbber_parent_class)->style_set (widget,
- prev_style);
-
- icon_theme_changed (KATZE_THROBBER (widget));
-}
-
-static void
-katze_throbber_screen_changed (GtkWidget* widget,
- GdkScreen* prev_screen)
-{
- if (GTK_WIDGET_CLASS (katze_throbber_parent_class)->screen_changed)
- GTK_WIDGET_CLASS (katze_throbber_parent_class)->screen_changed (
- widget,
- prev_screen);
-
- icon_theme_changed (KATZE_THROBBER (widget));
-}
-
-static void
-katze_throbber_size_request (GtkWidget* widget,
- GtkRequisition* requisition)
-{
- KatzeThrobber* throbber = KATZE_THROBBER (widget);
-
- requisition->width = throbber->width;
- requisition->height = throbber->height;
-#if !GTK_CHECK_VERSION (3, 0, 0)
- GTK_WIDGET_CLASS (katze_throbber_parent_class)->size_request (widget,
- requisition);
-#endif
-}
-
-#if GTK_CHECK_VERSION (3, 0, 0)
-static void
-katze_throbber_get_preferred_height (GtkWidget *widget,
- gint *minimal_height,
- gint *natural_height)
-{
- GtkRequisition requisition;
-
- katze_throbber_size_request (widget, &requisition);
-
- *minimal_height = *natural_height = requisition.height;
-}
-
-static void
-katze_throbber_get_preferred_width (GtkWidget *widget,
- gint *minimal_width,
- gint *natural_width)
-{
- GtkRequisition requisition;
-
- katze_throbber_size_request (widget, &requisition);
-
- *minimal_width = *natural_width = requisition.width;
-}
-#endif
-
-static void
-katze_throbber_aligned_coords (GtkWidget* widget,
- gint* ax,
- gint* ay)
-{
- gfloat xalign, yalign;
- gint xpad, ypad;
- GtkAllocation allocation;
- GtkRequisition requisition;
-
- xalign = 0.0;
- yalign = 0.5;
- xpad = ypad = 0.0;
-
- #if GTK_CHECK_VERSION (3, 0, 0)
- allocation.x = allocation.y = 0;
- allocation.width = gtk_widget_get_allocated_width (widget);
- allocation.height = gtk_widget_get_allocated_height (widget);
- gtk_widget_get_preferred_size (widget, &requisition, NULL);
- #else
- gtk_widget_get_allocation (widget, &allocation);
- gtk_widget_size_request (widget, &requisition);
- #endif
- *ax = floor (allocation.x + xpad
- + ((allocation.width - requisition.width) * xalign));
- *ay = floor (allocation.y + ypad
- + ((allocation.height - requisition.height) * yalign));
-}
-
-static gboolean
-katze_throbber_expose_event (GtkWidget* widget,
-#if GTK_CHECK_VERSION (3, 0, 0)
- cairo_t* cr)
-#else
- GdkEventExpose* event)
-#endif
-{
- KatzeThrobber* throbber = KATZE_THROBBER (widget);
- gint ax, ay;
-
- if (G_UNLIKELY (!throbber->width || !throbber->height))
- return TRUE;
-
- if (G_UNLIKELY (!throbber->pixbuf && !throbber->static_pixbuf))
- if (throbber->animated && !throbber->pixbuf && !throbber->icon_name)
- return TRUE;
-
- if (!throbber->animated && (throbber->static_pixbuf
- || throbber->static_icon_name || throbber->static_stock_id))
- {
-#if !GTK_CHECK_VERSION (3, 0, 0)
- cairo_t* cr;
-#endif
- if (G_UNLIKELY (!throbber->static_pixbuf && throbber->static_icon_name))
- {
- icon_theme_changed (KATZE_THROBBER (widget));
-
- if (!throbber->static_pixbuf)
- {
- g_warning (_("Named icon '%s' couldn't be loaded"),
- throbber->static_icon_name);
- katze_assign (throbber->static_icon_name, NULL);
- g_object_notify (G_OBJECT (throbber), "static-icon-name");
- return TRUE;
- }
- }
- else if (G_UNLIKELY (!throbber->static_pixbuf && throbber->static_stock_id))
- {
- icon_theme_changed (KATZE_THROBBER (widget));
-
- if (!throbber->static_pixbuf)
- {
- g_warning (_("Stock icon '%s' couldn't be loaded"),
- throbber->static_stock_id);
- katze_assign (throbber->static_stock_id, NULL);
- g_object_notify (G_OBJECT (throbber), "static-stock-id");
- return TRUE;
- }
- }
-
- katze_throbber_aligned_coords (widget, &ax, &ay);
-
-#if !GTK_CHECK_VERSION (3, 0, 0)
- cr = gdk_cairo_create (gtk_widget_get_window (widget));
-#endif
- gdk_cairo_set_source_pixbuf (cr, throbber->static_pixbuf, ax, ay);
- cairo_paint (cr);
-#if !GTK_CHECK_VERSION (3, 0, 0)
- cairo_destroy (cr);
-#endif
- }
- else
- {
- if (throbber->animated)
-#if GTK_CHECK_VERSION (3, 0, 0)
- return GTK_WIDGET_CLASS (katze_throbber_parent_class)->draw (widget, cr);
-#else
- return GTK_WIDGET_CLASS (katze_throbber_parent_class)->expose_event (widget, event);
-#endif
- }
-
- return TRUE;
-}
diff --git a/katze/katze-throbber.h b/katze/katze-throbber.h
deleted file mode 100644
index 18c212ed..00000000
--- a/katze/katze-throbber.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- Copyright (C) 2007 Christian Dywan <christian@twotoasts.de>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- See the file COPYING for the full license text.
-*/
-
-#ifndef __KATZE_THROBBER_H__
-#define __KATZE_THROBBER_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define KATZE_TYPE_THROBBER \
- (katze_throbber_get_type ())
-#define KATZE_THROBBER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), KATZE_TYPE_THROBBER, KatzeThrobber))
-#define KATZE_THROBBER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), KATZE_TYPE_THROBBER, KatzeThrobberClass))
-#define KATZE_IS_THROBBER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), KATZE_TYPE_THROBBER))
-#define KATZE_IS_THROBBER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), KATZE_TYPE_THROBBER))
-#define KATZE_THROBBER_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), KATZE_TYPE_THROBBER, KatzeThrobberClass))
-
-typedef struct _KatzeThrobber KatzeThrobber;
-typedef struct _KatzeThrobberPrivate KatzeThrobberPrivate;
-typedef struct _KatzeThrobberClass KatzeThrobberClass;
-
-
-GType
-katze_throbber_get_type (void) G_GNUC_CONST;
-
-GtkWidget*
-katze_throbber_new (void);
-
-void
-katze_throbber_set_icon_size (KatzeThrobber* throbber,
- GtkIconSize icon_size);
-
-void
-katze_throbber_set_icon_name (KatzeThrobber* throbber,
- const gchar* icon_size);
-
-void
-katze_throbber_set_pixbuf (KatzeThrobber* throbber,
- GdkPixbuf* pixbuf);
-
-void
-katze_throbber_set_animated (KatzeThrobber* throbber,
- gboolean animated);
-
-void
-katze_throbber_set_static_icon_name (KatzeThrobber* throbber,
- const gchar* icon_name);
-
-void
-katze_throbber_set_static_pixbuf (KatzeThrobber* throbber,
- GdkPixbuf* pixbuf);
-
-void
-katze_throbber_set_static_stock_id (KatzeThrobber* throbber,
- const gchar* stock_id);
-
-GtkIconSize
-katze_throbber_get_icon_size (KatzeThrobber* throbber);
-
-const gchar*
-katze_throbber_get_icon_name (KatzeThrobber* throbber);
-
-GdkPixbuf*
-katze_throbber_get_pixbuf (KatzeThrobber* throbber);
-
-gboolean
-katze_throbber_get_animated (KatzeThrobber* throbber);
-
-const gchar*
-katze_throbber_get_static_icon_name (KatzeThrobber *throbber);
-
-GdkPixbuf*
-katze_throbber_get_static_pixbuf (KatzeThrobber* throbber);
-
-const gchar*
-katze_throbber_get_static_stock_id (KatzeThrobber* throbber);
-
-G_END_DECLS
-
-#endif /* __KATZE_THROBBER_H__ */
diff --git a/katze/katze-utils.c b/katze/katze-utils.c
index 6f9f4c77..e83f34d7 100644
--- a/katze/katze-utils.c
+++ b/katze/katze-utils.c
@@ -73,10 +73,12 @@ proxy_uri_file_set_cb (GtkFileChooser* button,
#if GTK_CHECK_VERSION (3, 2, 0)
static void
proxy_font_chooser_font_activated_cb (GtkFontChooser* chooser,
- const gchar* font_name,
GObject* object)
{
- gtk_font_chooser_set_font (chooser, font_name);
+ PangoFontFamily* font_family = gtk_font_chooser_get_font_family (GTK_FONT_CHOOSER (chooser));
+ const gchar* font_name = pango_font_family_get_name (font_family);
+ const gchar* property = g_object_get_data (G_OBJECT (chooser), "property");
+ g_object_set (object, property, font_name, NULL);
}
static gboolean
@@ -335,7 +337,6 @@ katze_app_info_get_all_for_category (const gchar* category)
GList* all_apps = g_app_info_get_all ();
#endif
GList* apps = NULL;
- GAppInfo* info;
GList* app;
for (app = apps; app; app = g_list_next (app))
{
@@ -394,7 +395,7 @@ proxy_populate_apps (GtkWidget* widget)
GList* app;
for (app = apps; app; app = g_list_next (app))
{
- GAppInfo* info = app->data;
+ info = app->data;
const gchar* name = g_app_info_get_name (info);
GIcon* icon = g_app_info_get_icon (info);
gchar* icon_name;
@@ -615,7 +616,8 @@ katze_property_proxy (gpointer object,
widget = gtk_font_button_new ();
gtk_font_button_set_show_size (GTK_FONT_BUTTON (widget), FALSE);
gtk_font_chooser_set_font (GTK_FONT_CHOOSER (widget), string);
- g_signal_connect (widget, "font-activated",
+ /* font-activated doesn't work with at least GTK+ 3.8.4 */
+ g_signal_connect (widget, "font-set",
G_CALLBACK (proxy_font_chooser_font_activated_cb), object);
gtk_font_chooser_set_filter_func (GTK_FONT_CHOOSER (widget),
(GtkFontFilterFunc)proxy_font_chooser_filter_monospace_cb, GINT_TO_POINTER (monospace), NULL);
diff --git a/katze/katze.h b/katze/katze.h
index 5d5b780b..6518b659 100644
--- a/katze/katze.h
+++ b/katze/katze.h
@@ -13,7 +13,6 @@
#define __KATZE_H__
#include "katze-http-auth.h"
-#include "katze-throbber.h"
#include "katze-utils.h"
#include "katze-item.h"
#include "katze-array.h"
diff --git a/katze/katze.vapi b/katze/katze.vapi
index 73eb663d..1f03a4f7 100644
--- a/katze/katze.vapi
+++ b/katze/katze.vapi
@@ -33,6 +33,8 @@ namespace Katze {
public bool get_meta_boolean (string key);
public int64 get_meta_integer (string key);
public void set_meta_integer (string key, int64 value);
+ public unowned string? get_meta_string (string key);
+ public void set_meta_string (string key, string value);
}
}
diff --git a/katze/midori-paths.vala b/katze/midori-paths.vala
index 42007039..7f74aaa2 100644
--- a/katze/midori-paths.vala
+++ b/katze/midori-paths.vala
@@ -157,6 +157,18 @@ namespace Midori {
WebKit.get_favicon_database ().set_path (folder);
#endif
}
+ else
+ {
+#if HAVE_WEBKIT2
+ /* with wk2 set_favicon_database_directory can only be called once and actually
+ initializes and enables the favicon database, so we do not call it in this case */
+#else
+ /* wk1 documentation claims that the favicon database is not enabled unless
+ a call to favicon_database.set_path is made, but in fact it must be explicitly
+ disabled by setting to null (verified as of webkitgtk 2.3.1) */
+ WebKit.get_favicon_database ().set_path (null);
+#endif
+ }
if (strcmp (Environment.get_variable ("MIDORI_DEBUG"), "paths") == 0) {
stdout.printf ("config: %s\ncache: %s\nuser_data: %s\ntmp: %s\n",
config_dir, cache_dir, user_data_dir, tmp_dir);
@@ -354,7 +366,7 @@ namespace Midori {
return path;
/* Fallback to build folder */
- File? parent = File.new_for_path (exec_path).get_parent ();
+ File? parent = File.new_for_path (exec_path);
while (parent != null) {
var data = parent.get_child ("data");
var child = data.get_child (filename);
diff --git a/katze/midori-uri.vala b/katze/midori-uri.vala
index 41216e17..4eda36d6 100644
--- a/katze/midori-uri.vala
+++ b/katze/midori-uri.vala
@@ -17,9 +17,7 @@ namespace GLib {
namespace Midori {
public class URI : Object {
public static string? parse_hostname (string? uri, out string path) {
- /* path may be null. */
- if (&path != null)
- path = null;
+ path = null;
if (uri == null)
return uri;
unowned string? hostname = uri.chr (-1, '/');
@@ -27,10 +25,8 @@ namespace Midori {
|| hostname.chr (-1, ' ') != null)
return null;
hostname = hostname.offset (2);
- if (&path != null) {
- if ((path = hostname.chr (-1, '/')) != null)
- return hostname.split ("/")[0];
- }
+ if ((path = hostname.chr (-1, '/')) != null)
+ return hostname.split ("/")[0];
return hostname;
}
/* Deprecated: 0.4.3 */
@@ -53,9 +49,9 @@ namespace Midori {
return uri;
}
public static string get_base_domain (string uri) {
- string ascii = to_ascii (uri);
#if HAVE_LIBSOUP_2_40_0
try {
+ string ascii = to_ascii (uri);
return Soup.tld_get_base_domain (ascii);
} catch (Error error) {
/* This is fine, we fallback to hostname */
@@ -205,11 +201,8 @@ namespace Midori {
/* No SHA256: no known usage and no need for strong encryption */
- if (&checksum != null)
- checksum = fragment != null
- ? fragment.offset (delimiter.length) : null;
- if (&label != null)
- label = display;
+ checksum = fragment != null ? fragment.offset (delimiter.length) : null;
+ label = display;
return type;
}
}
diff --git a/midori/main.c b/midori/main.c
index 0f12e0cf..30a2a6b4 100644
--- a/midori/main.c
+++ b/midori/main.c
@@ -219,7 +219,7 @@ main (int argc,
else if (type == G_TYPE_PARAM_ENUM)
{
GEnumClass* enum_class = G_ENUM_CLASS (g_type_class_peek (pspec->value_type));
- gint j = 0;
+ guint j = 0;
tname_string = g_string_new ("");
for (j = 0; j < enum_class->n_values; j++)
{
diff --git a/midori/midori-app.c b/midori/midori-app.c
index 7e3162e7..8d6d177c 100644
--- a/midori/midori-app.c
+++ b/midori/midori-app.c
@@ -615,6 +615,11 @@ midori_app_get_name (MidoriApp* app)
gboolean
midori_app_get_crashed (MidoriApp* app)
{
+ static gint cache = -1;
+
+ if (cache != -1)
+ return (gboolean) cache;
+
if (!midori_paths_is_readonly ())
{
/* We test for the presence of a dummy file which is created once
@@ -624,10 +629,14 @@ midori_app_get_crashed (MidoriApp* app)
if (!crashed)
g_file_set_contents (config_file, "RUNNING", -1, NULL);
g_free (config_file);
- if (crashed)
+ if (crashed) {
+ cache = 1;
return TRUE;
+ }
}
+ cache = 0;
+
return FALSE;
}
diff --git a/midori/midori-bookmarks-db.c b/midori/midori-bookmarks-db.c
index 47b8ee0f..b858454f 100644
--- a/midori/midori-bookmarks-db.c
+++ b/midori/midori-bookmarks-db.c
@@ -39,11 +39,7 @@ struct _MidoriBookmarksDb
KatzeArray parent_instance;
sqlite3* db;
- GList* pending_inserts;
- GHashTable* pending_updates;
- GHashTable* pending_deletes;
GHashTable* all_items;
- gboolean in_idle_func;
};
struct _MidoriBookmarksDbClass
@@ -87,9 +83,6 @@ static void
_midori_bookmarks_db_clear (KatzeArray* array);
static void
-midori_bookmarks_db_force_idle (MidoriBookmarksDb* bookmarks);
-
-static void
midori_bookmarks_db_finalize (GObject* object);
static gint64
@@ -154,13 +147,8 @@ static void
midori_bookmarks_db_init (MidoriBookmarksDb* bookmarks)
{
bookmarks->db = NULL;
- bookmarks->pending_inserts = NULL;
- bookmarks->pending_updates = g_hash_table_new (item_hash, item_equal);
- bookmarks->pending_deletes = g_hash_table_new (item_hash, item_equal);
bookmarks->all_items = g_hash_table_new (item_hash, item_equal);
- bookmarks->in_idle_func = FALSE;
-
katze_item_set_meta_integer (KATZE_ITEM (bookmarks), "id", -1);
katze_item_set_name (KATZE_ITEM (bookmarks), _("Bookmarks"));
g_hash_table_insert (bookmarks->all_items, bookmarks, bookmarks);
@@ -174,13 +162,9 @@ midori_bookmarks_db_finalize (GObject* object)
if (bookmarks->db)
{
- midori_bookmarks_db_force_idle (bookmarks);
sqlite3_close (bookmarks->db);
}
- g_list_free (bookmarks->pending_inserts);
- g_hash_table_unref (bookmarks->pending_updates);
- g_hash_table_unref (bookmarks->pending_deletes);
g_hash_table_unref (bookmarks->all_items);
G_OBJECT_CLASS (midori_bookmarks_db_parent_class)->finalize (object);
@@ -240,7 +224,6 @@ _midori_bookmarks_db_add_item (KatzeArray* array,
g_return_if_fail (KATZE_IS_ITEM (item));
bookmarks = MIDORI_BOOKMARKS_DB (array);
- g_return_if_fail (bookmarks->in_idle_func);
parent = katze_item_get_parent (KATZE_ITEM (item));
@@ -280,8 +263,6 @@ _midori_bookmarks_db_update_item (MidoriBookmarksDb* bookmarks,
g_return_if_fail (IS_MIDORI_BOOKMARKS_DB (bookmarks));
g_return_if_fail (KATZE_IS_ITEM (item));
- g_return_if_fail (bookmarks->in_idle_func);
-
parent = katze_item_get_parent (KATZE_ITEM (item));
g_return_if_fail (parent);
@@ -301,15 +282,11 @@ static void
_midori_bookmarks_db_remove_item (KatzeArray* array,
gpointer item)
{
- MidoriBookmarksDb *bookmarks;
KatzeArray* parent;
g_return_if_fail (IS_MIDORI_BOOKMARKS_DB (array));
g_return_if_fail (KATZE_IS_ITEM (item));
- bookmarks = MIDORI_BOOKMARKS_DB (array);
- g_return_if_fail (bookmarks->in_idle_func);
-
parent = katze_item_get_parent (KATZE_ITEM (item));
g_return_if_fail (parent);
@@ -334,7 +311,6 @@ _midori_bookmarks_db_move_item (KatzeArray* array,
gpointer item,
gint position)
{
- MidoriBookmarksDb *bookmarks;
KatzeArray* parent;
g_return_if_fail (IS_MIDORI_BOOKMARKS_DB (array));
@@ -380,50 +356,6 @@ midori_bookmarks_db_signal_update_item (MidoriBookmarksDb* array,
}
/**
- * midori_bookmarks_db_begin_transaction:
- * @db: the removed #KatzeItem
- *
- * Internal function that starts an SQL transaction.
- **/
-static gboolean
-midori_bookmarks_db_begin_transaction (sqlite3* db)
-{
- char* errmsg = NULL;
-
- if (sqlite3_exec (db, "BEGIN TRANSACTION;", NULL, NULL, &errmsg) != SQLITE_OK)
- {
- g_printerr (_("Failed to begin transaction: %s\n"), errmsg);
- sqlite3_free (errmsg);
- return FALSE;
- }
-
- return TRUE;
-}
-
-/**
- * midori_bookmarks_db_end_transaction:
- * @db: the removed #KatzeItem
- * @commit : boolean
- *
- * Internal function that ends an SQL transaction.
- * If @commit is %TRUE, the transaction is ended by a COMMIT.
- * It is ended by a ROLLBACK otherwise.
- **/
-static void
-midori_bookmarks_db_end_transaction (sqlite3* db, gboolean commit)
-{
- char* errmsg = NULL;
- if (sqlite3_exec (db, (commit ? "COMMIT;" : "ROLLBACK;"), NULL, NULL, &errmsg) != SQLITE_OK)
- {
- if (commit)
- g_printerr (_("Failed to end transaction: %s\n"), errmsg);
- else
- g_printerr (_("Failed to cancel transaction: %s\n"), errmsg);
- sqlite3_free (errmsg);
- }
-}
-
-/**
* midori_bookmarks_db_add_item_recursive:
* @item: the removed #KatzeItem
* @bookmarks : the main bookmarks array
@@ -476,26 +408,11 @@ static void
midori_bookmarks_db_remove_item_recursive (KatzeItem* item,
MidoriBookmarksDb* bookmarks)
{
- GHashTableIter hash_iter;
- gpointer key, value;
gpointer found;
KatzeArray* array;
KatzeItem* child;
GList* list;
- if (NULL != (found = g_list_find (bookmarks->pending_inserts, item)))
- {
- g_object_unref (((GList*)found)->data);
- bookmarks->pending_inserts = g_list_delete_link (bookmarks->pending_inserts,
- ((GList*)found));
- }
-
- if (NULL != (found = g_hash_table_lookup (bookmarks->pending_updates, item)))
- {
- g_hash_table_remove (bookmarks->pending_updates, found);
- g_object_unref (found);
- }
-
if (NULL != (found = g_hash_table_lookup (bookmarks->all_items, item)))
{
g_hash_table_remove (bookmarks->all_items, found);
@@ -516,119 +433,6 @@ midori_bookmarks_db_remove_item_recursive (KatzeItem* item,
}
/**
- * midori_bookmarks_db_idle_func:
- * @data: the main bookmark array
- *
- * Internal function executed during idle time that Packs pending database
- * operations in one transaction.
- *
- * Pending operations are either:
- * a. a list of pending add items,
- * all child #KatzeItem of a #KatzeArray are recursively added.
- * Each added #KatzeItem is memorized for future use.
- * (See %midori_bookmarks_db_array_from_statement())
- * b. a hash table of items to update,
- * c. or a hash table of items to remove
- * the database CASCADE on delete takes care of removal of the childs
- * #KatzeItem of a #KatzeArray in the database
- *
- * When database operations are done, the #KatzeArray equivalent operations
- * are called to:
- * 1. update the #KatzeArray tree content
- * 2. signal the client views of the #KatzeArray tree content change.
- **/
-static gboolean
-midori_bookmarks_db_idle_func (gpointer data)
-{
- GTimer *timer = g_timer_new();
- gint count = 0;
- gulong microseconds;
- gboolean with_transaction;
- MidoriBookmarksDb* bookmarks = MIDORI_BOOKMARKS_DB (data);
- GList* list_iter;
- GHashTableIter hash_iter;
- gpointer key, value;
-
- bookmarks->in_idle_func = TRUE;
-
- g_timer_start (timer);
-
- with_transaction = midori_bookmarks_db_begin_transaction (bookmarks->db);
-
- for (list_iter = bookmarks->pending_inserts; list_iter; list_iter = g_list_next (list_iter))
- {
- KatzeItem *item = KATZE_ITEM (list_iter->data);
-
- count += midori_bookmarks_db_add_item_recursive (bookmarks, item);
- katze_array_add_item (KATZE_ARRAY (bookmarks), item);
-
- g_object_unref (item);
- }
-
- g_hash_table_iter_init (&hash_iter, bookmarks->pending_updates);
-
- while (g_hash_table_iter_next (&hash_iter, &key, &value))
- {
- KatzeItem *item = KATZE_ITEM (value);
-
- midori_bookmarks_db_update_item_db (bookmarks->db, item);
- midori_bookmarks_db_signal_update_item (bookmarks, item);
- g_object_unref (item);
- count++;
- }
-
- g_hash_table_iter_init (&hash_iter, bookmarks->pending_deletes);
-
- while (g_hash_table_iter_next (&hash_iter, &key, &value))
- {
- KatzeItem *item = KATZE_ITEM (value);
-
- midori_bookmarks_db_remove_item_db (bookmarks->db, item);
- katze_array_remove_item (KATZE_ARRAY (bookmarks), item);
- g_object_unref (item);
- count++;
- }
-
- if (with_transaction)
- midori_bookmarks_db_end_transaction (bookmarks->db, TRUE);
-
- g_timer_elapsed (timer, &microseconds);
- g_print ("midori_bookmarks_db_idle: %d DB operation(s) in %lu micro-seconds\n",
- count, microseconds);
-
- g_timer_destroy (timer);
-
- g_hash_table_remove_all (bookmarks->pending_deletes);
- g_hash_table_remove_all (bookmarks->pending_updates);
- g_list_free (bookmarks->pending_inserts);
- bookmarks->pending_inserts = NULL;
-
- bookmarks->in_idle_func = FALSE;
-
- return FALSE;
-}
-
-/**
- * midori_bookmarks_db_idle_start:
- * @bookmarks: the main bookmark array
- *
- * Internal function that checks whether idle processing is pending,
- * if not, add a new one.
- **/
-static void
-midori_bookmarks_db_idle_start (MidoriBookmarksDb* bookmarks)
-{
- g_return_if_fail (bookmarks->db != NULL);
-
- if (bookmarks->pending_inserts
- || g_hash_table_size (bookmarks->pending_updates)
- || g_hash_table_size (bookmarks->pending_deletes))
- return;
-
- g_idle_add (midori_bookmarks_db_idle_func, bookmarks);
-}
-
-/**
* midori_bookmarks_db_insert_item_db:
* @db: the #sqlite3
* @item: #KatzeItem the item to insert
@@ -827,22 +631,11 @@ midori_bookmarks_db_add_item (MidoriBookmarksDb* bookmarks, KatzeItem* item)
{
g_return_if_fail (IS_MIDORI_BOOKMARKS_DB (bookmarks));
g_return_if_fail (KATZE_IS_ITEM (item));
+ g_return_if_fail (NULL == katze_item_get_meta_string (item, "id"));
- /* Force NULL id for database addition */
- if (NULL != katze_item_get_meta_string (item, "id"))
- {
- katze_item_set_meta_string (item, "id", NULL);
- }
-
- gpointer found = g_list_find (bookmarks->pending_inserts, item);
-
- if (found)
- return;
-
- midori_bookmarks_db_idle_start (bookmarks);
+ midori_bookmarks_db_add_item_recursive (bookmarks, item);
- g_object_ref (item);
- bookmarks->pending_inserts = g_list_append (bookmarks->pending_inserts, item);
+ katze_array_add_item (KATZE_ARRAY (bookmarks), item);
}
/**
@@ -862,15 +655,9 @@ midori_bookmarks_db_update_item (MidoriBookmarksDb* bookmarks, KatzeItem* item)
g_return_if_fail (katze_item_get_meta_string (item, "id"));
g_return_if_fail (0 != katze_item_get_meta_integer (item, "id"));
- gpointer found = g_hash_table_lookup (bookmarks->pending_updates, item);
-
- if (found)
- return;
-
- midori_bookmarks_db_idle_start (bookmarks);
+ midori_bookmarks_db_update_item_db (bookmarks->db, item);
- g_object_ref (item);
- g_hash_table_insert (bookmarks->pending_updates, item, item);
+ midori_bookmarks_db_signal_update_item (bookmarks, item);
}
/**
@@ -890,85 +677,11 @@ midori_bookmarks_db_remove_item (MidoriBookmarksDb* bookmarks, KatzeItem* item)
g_return_if_fail (katze_item_get_meta_string (item, "id"));
g_return_if_fail (0 != katze_item_get_meta_integer (item, "id"));
- gpointer found = g_hash_table_lookup (bookmarks->pending_deletes, item);
-
- if (found)
- return;
-
- midori_bookmarks_db_idle_start (bookmarks);
-
midori_bookmarks_db_remove_item_recursive (item, bookmarks);
+ midori_bookmarks_db_remove_item_db (bookmarks->db, item);
- g_object_ref (item);
- g_hash_table_insert (bookmarks->pending_deletes, item, item);
-}
-
-#define _APPEND_TO_SQL_ERRORMSG(custom_errmsg) \
- do { \
- if (sql_errmsg) \
- { \
- g_string_append_printf (errmsg_str, "%s : %s\n", custom_errmsg, sql_errmsg); \
- sqlite3_free (sql_errmsg); \
- } \
- else \
- g_string_append (errmsg_str, custom_errmsg); \
- } while (0)
-
-static gboolean
-midori_bookmarks_db_import_from_old_db (sqlite3* db,
- const gchar* oldfile,
- gchar** errmsg)
-{
- gint sql_errcode;
- gboolean failure = FALSE;
- gchar* sql_errmsg = NULL;
- GString* errmsg_str = g_string_new (NULL);
- gchar* attach_stmt = sqlite3_mprintf ("ATTACH DATABASE %Q AS old_db;", oldfile);
- const gchar* convert_stmts =
- "BEGIN TRANSACTION;"
- "INSERT INTO main.bookmarks (parentid, title, uri, desc, app, toolbar) "
- "SELECT NULL AS parentid, title, uri, desc, app, toolbar "
- "FROM old_db.bookmarks;"
- "UPDATE main.bookmarks SET parentid = ("
- "SELECT id FROM main.bookmarks AS b1 WHERE b1.title = ("
- "SELECT folder FROM old_db.bookmarks WHERE title = main.bookmarks.title));"
- "COMMIT;";
- const gchar* detach_stmt = "DETACH DATABASE old_db;";
-
- *errmsg = NULL;
- sql_errcode = sqlite3_exec (db, attach_stmt, NULL, NULL, &sql_errmsg);
- sqlite3_free (attach_stmt);
-
- if (sql_errcode != SQLITE_OK)
- {
- _APPEND_TO_SQL_ERRORMSG (_("failed to ATTACH old db"));
- goto convert_failed;
- }
-
- if (sqlite3_exec (db, convert_stmts, NULL, NULL, &sql_errmsg) != SQLITE_OK)
- {
- failure = TRUE;
- _APPEND_TO_SQL_ERRORMSG (_("failed to import from old db"));
-
- /* try to get back to previous state */
- if (sqlite3_exec (db, "ROLLBACK TRANSACTION;", NULL, NULL, &sql_errmsg) != SQLITE_OK)
- _APPEND_TO_SQL_ERRORMSG (_("failed to rollback the transaction"));
- }
-
- if (sqlite3_exec (db, detach_stmt, NULL, NULL, &sql_errmsg) != SQLITE_OK)
- _APPEND_TO_SQL_ERRORMSG (_("failed to DETACH "));
-
- if (failure)
- {
- convert_failed:
- *errmsg = g_string_free (errmsg_str, FALSE);
- g_print ("ERRORR: %s\n", errmsg_str->str);
- return FALSE;
- }
-
- return TRUE;
+ katze_array_remove_item (KATZE_ARRAY (bookmarks), item);
}
-#undef _APPEND_TO_SQL_ERRORMSG
static void
midori_bookmarks_db_dbtracer (void* dummy,
@@ -989,177 +702,33 @@ midori_bookmarks_db_dbtracer (void* dummy,
MidoriBookmarksDb*
midori_bookmarks_db_new (char** errmsg)
{
- sqlite3* db;
- gchar* oldfile;
- gchar* newfile;
- gboolean newfile_did_exist, oldfile_exists;
- const gchar* create_stmt;
- gchar* sql_errmsg = NULL;
- gchar* import_errmsg = NULL;
- KatzeArray* array;
- MidoriBookmarksDb* bookmarks;
+ MidoriBookmarksDatabase* database;
+ GError* error = NULL;
+ sqlite3* db;
+ MidoriBookmarksDb* bookmarks;
g_return_val_if_fail (errmsg != NULL, NULL);
- oldfile = midori_paths_get_config_filename_for_writing ("bookmarks.db");
- oldfile_exists = g_access (oldfile, F_OK) == 0;
- newfile = midori_paths_get_config_filename_for_writing ("bookmarks_v2.db");
- newfile_did_exist = g_access (newfile, F_OK) == 0;
-
- /* sqlite3_open will create the file if it did not exists already */
- if (sqlite3_open (newfile, &db) != SQLITE_OK)
+ database = midori_bookmarks_database_new (&error);
+
+ if (error != NULL)
{
- *errmsg = g_strdup_printf (_("Failed to open database: %s\n"),
- db ? sqlite3_errmsg (db) : "(db = NULL)");
- goto init_failed;
+ *errmsg = g_strdup (error->message);
+ g_error_free (error);
+ return NULL;
}
+ db = midori_database_get_db (MIDORI_DATABASE (database));
+ g_return_val_if_fail (db != NULL, NULL);
+
if (midori_debug ("bookmarks"))
sqlite3_trace (db, midori_bookmarks_db_dbtracer, NULL);
- create_stmt = /* Table structure */
- "CREATE TABLE IF NOT EXISTS bookmarks "
- "(id INTEGER PRIMARY KEY AUTOINCREMENT, "
- "parentid INTEGER DEFAULT NULL, "
- "title TEXT, uri TEXT, desc TEXT, app INTEGER, toolbar INTEGER, "
- "pos_panel INTEGER, pos_bar INTEGER, "
- "created DATE DEFAULT CURRENT_TIMESTAMP, "
- "last_visit DATE, visit_count INTEGER DEFAULT 0, "
- "nick TEXT, "
- "FOREIGN KEY(parentid) REFERENCES bookmarks(id) "
- "ON DELETE CASCADE); PRAGMA foreign_keys = ON;"
-
- /* trigger: insert panel position */
- "CREATE TRIGGER IF NOT EXISTS bookmarkInsertPosPanel "
- "AFTER INSERT ON bookmarks FOR EACH ROW "
- "BEGIN UPDATE bookmarks SET pos_panel = ("
- "SELECT ifnull(MAX(pos_panel),0)+1 FROM bookmarks WHERE "
- "(NEW.parentid IS NOT NULL AND parentid = NEW.parentid) "
- "OR (NEW.parentid IS NULL AND parentid IS NULL)) "
- "WHERE id = NEW.id; END;"
-
- /* trigger: insert Bookmarkbar position */
- "CREATE TRIGGER IF NOT EXISTS bookmarkInsertPosBar "
- "AFTER INSERT ON bookmarks FOR EACH ROW WHEN NEW.toolbar=1 "
- "BEGIN UPDATE bookmarks SET pos_bar = ("
- "SELECT ifnull(MAX(pos_bar),0)+1 FROM bookmarks WHERE "
- "((NEW.parentid IS NOT NULL AND parentid = NEW.parentid) "
- "OR (NEW.parentid IS NULL AND parentid IS NULL)) AND toolbar=1) "
- "WHERE id = NEW.id; END;"
-
- /* trigger: update panel position */
- "CREATE TRIGGER IF NOT EXISTS bookmarkUpdatePosPanel "
- "BEFORE UPDATE OF parentid ON bookmarks FOR EACH ROW "
- "WHEN ((NEW.parentid IS NULL OR OLD.parentid IS NULL) "
- "AND NEW.parentid IS NOT OLD.parentid) OR "
- "((NEW.parentid IS NOT NULL AND OLD.parentid IS NOT NULL) "
- "AND NEW.parentid!=OLD.parentid) "
- "BEGIN UPDATE bookmarks SET pos_panel = pos_panel-1 "
- "WHERE ((OLD.parentid IS NOT NULL AND parentid = OLD.parentid) "
- "OR (OLD.parentid IS NULL AND parentid IS NULL)) AND pos_panel > OLD.pos_panel; "
- "UPDATE bookmarks SET pos_panel = ("
- "SELECT ifnull(MAX(pos_panel),0)+1 FROM bookmarks "
- "WHERE (NEW.parentid IS NOT NULL AND parentid = NEW.parentid) "
- "OR (NEW.parentid IS NULL AND parentid IS NULL)) "
- "WHERE id = OLD.id; END;"
-
- /* trigger: update Bookmarkbar position */
- "CREATE TRIGGER IF NOT EXISTS bookmarkUpdatePosBar0 "
- "AFTER UPDATE OF parentid, toolbar ON bookmarks FOR EACH ROW "
- "WHEN ((NEW.parentid IS NULL OR OLD.parentid IS NULL) "
- "AND NEW.parentid IS NOT OLD.parentid) "
- "OR ((NEW.parentid IS NOT NULL AND OLD.parentid IS NOT NULL) "
- "AND NEW.parentid!=OLD.parentid) OR (OLD.toolbar=1 AND NEW.toolbar=0) "
- "BEGIN UPDATE bookmarks SET pos_bar = NULL WHERE id = NEW.id; "
- "UPDATE bookmarks SET pos_bar = pos_bar-1 "
- "WHERE ((OLD.parentid IS NOT NULL AND parentid = OLD.parentid) "
- "OR (OLD.parentid IS NULL AND parentid IS NULL)) AND pos_bar > OLD.pos_bar; END;"
-
- /* trigger: update Bookmarkbar position */
- "CREATE TRIGGER IF NOT EXISTS bookmarkUpdatePosBar1 "
- "BEFORE UPDATE OF parentid, toolbar ON bookmarks FOR EACH ROW "
- "WHEN ((NEW.parentid IS NULL OR OLD.parentid IS NULL) "
- "AND NEW.parentid IS NOT OLD.parentid) OR "
- "((NEW.parentid IS NOT NULL AND OLD.parentid IS NOT NULL) "
- "AND NEW.parentid!=OLD.parentid) OR (OLD.toolbar=0 AND NEW.toolbar=1) "
- "BEGIN UPDATE bookmarks SET pos_bar = ("
- "SELECT ifnull(MAX(pos_bar),0)+1 FROM bookmarks WHERE "
- "(NEW.parentid IS NOT NULL AND parentid = NEW.parentid) "
- "OR (NEW.parentid IS NULL AND parentid IS NULL)) "
- "WHERE id = OLD.id; END;"
-
- /* trigger: delete panel position */
- "CREATE TRIGGER IF NOT EXISTS bookmarkDeletePosPanel "
- "AFTER DELETE ON bookmarks FOR EACH ROW "
- "BEGIN UPDATE bookmarks SET pos_panel = pos_panel-1 "
- "WHERE ((OLD.parentid IS NOT NULL AND parentid = OLD.parentid) "
- "OR (OLD.parentid IS NULL AND parentid IS NULL)) AND pos_panel > OLD.pos_panel; END;"
-
- /* trigger: delete Bookmarkbar position */
- "CREATE TRIGGER IF NOT EXISTS bookmarkDeletePosBar "
- "AFTER DELETE ON bookmarks FOR EACH ROW WHEN OLD.toolbar=1 "
- "BEGIN UPDATE bookmarks SET pos_bar = pos_bar-1 "
- "WHERE ((OLD.parentid IS NOT NULL AND parentid = OLD.parentid) "
- "OR (OLD.parentid IS NULL AND parentid IS NULL)) AND pos_bar > OLD.pos_bar; END;";
-
-
- if (newfile_did_exist)
- {
- const gchar* setup_stmt = "PRAGMA foreign_keys = ON;";
- /* initial setup */
- if (sqlite3_exec (db, setup_stmt, NULL, NULL, &sql_errmsg) != SQLITE_OK)
- {
- *errmsg = g_strdup_printf (_("Couldn't setup bookmarks: %s\n"),
- sql_errmsg ? sql_errmsg : "(err = NULL)");
- sqlite3_free (sql_errmsg);
- goto init_failed;
- }
-
- /* we are done */
- goto init_success;
- }
- else
- {
- /* initial creation */
- if (sqlite3_exec (db, create_stmt, NULL, NULL, &sql_errmsg) != SQLITE_OK)
- {
- *errmsg = g_strdup_printf (_("Couldn't create bookmarks table: %s\n"),
- sql_errmsg ? sql_errmsg : "(err = NULL)");
- sqlite3_free (sql_errmsg);
-
- /* we can as well remove the new file */
- g_unlink (newfile);
- goto init_failed;
- }
-
- }
-
- if (oldfile_exists)
- /* import from old db */
- if (!midori_bookmarks_db_import_from_old_db (db, oldfile, &import_errmsg))
- {
- *errmsg = g_strdup_printf (_("Couldn't import from old database: %s\n"),
- import_errmsg ? import_errmsg : "(err = NULL)");
- g_free (import_errmsg);
- }
-
- init_success:
- g_free (newfile);
- g_free (oldfile);
- bookmarks = MIDORI_BOOKMARKS_DB (g_object_new (TYPE_MIDORI_BOOKMARKS_DB, NULL));
- bookmarks->db = db;
-
- g_object_set_data (G_OBJECT (bookmarks), "db", db);
- return bookmarks;
+ bookmarks = MIDORI_BOOKMARKS_DB (g_object_new (TYPE_MIDORI_BOOKMARKS_DB, NULL));
+ bookmarks->db = db;
- init_failed:
- g_free (newfile);
- g_free (oldfile);
-
- if (db)
- sqlite3_close (db);
-
- return NULL;
+ g_object_set_data (G_OBJECT (bookmarks), "db", db);
+ return bookmarks;
}
/**
@@ -1202,32 +771,15 @@ midori_bookmarks_db_import_array (MidoriBookmarksDb* bookmarks,
KATZE_ARRAY_FOREACH_ITEM_L (item, array, list)
{
+ /* IDs coming from previously exported database must be forgotten */
+ katze_item_set_meta_integer (item, "id", -1);
katze_item_set_meta_integer (item, "parentid", parentid);
midori_bookmarks_db_add_item (bookmarks, item);
}
-
g_list_free (list);
}
/**
- * midori_bookmarks_db_force_idle:
- * @array: the main bookmark array
- *
- * Internal function that checks if idle processing is pending.
- * If it is the case, removes it from idle time processing and
- * executes it immediately.
- **/
-static void
-midori_bookmarks_db_force_idle (MidoriBookmarksDb* bookmarks)
-{
- if (bookmarks->in_idle_func)
- return;
-
- if (g_idle_remove_by_data (bookmarks))
- midori_bookmarks_db_idle_func (bookmarks);
-}
-
-/**
* midori_bookmarks_db_array_from_statement:
* @stmt: the sqlite returned statement
* @bookmarks: the database controller
@@ -1261,7 +813,7 @@ midori_bookmarks_db_array_from_statement (sqlite3_stmt* stmt,
{
gint i;
KatzeItem* item;
- KatzeItem* found;
+ gpointer found;
item = katze_item_new ();
for (i = 0; i < cols; i++)
@@ -1307,8 +859,7 @@ midori_bookmarks_db_array_from_statement (sqlite3_stmt* stmt,
* @array: the main bookmark array
* @sqlcmd: the sqlcmd to execute
*
- * Internal function that first forces pending idle processing to update the
- * database then process the requested @sqlcmd.
+ * Internal function that process the requested @sqlcmd.
*
* Return value: a #KatzeArray on success, %NULL otherwise
**/
@@ -1321,8 +872,6 @@ midori_bookmarks_db_array_from_sqlite (MidoriBookmarksDb* bookmarks,
g_return_val_if_fail (bookmarks->db != NULL, NULL);
- midori_bookmarks_db_force_idle (bookmarks);
-
result = sqlite3_prepare_v2 (bookmarks->db, sqlcmd, -1, &stmt, NULL);
if (result != SQLITE_OK)
return NULL;
diff --git a/midori/midori-bookmarksdatabase.vala b/midori/midori-bookmarksdatabase.vala
new file mode 100644
index 00000000..c678035b
--- /dev/null
+++ b/midori/midori-bookmarksdatabase.vala
@@ -0,0 +1,101 @@
+/*
+ Copyright (C) 2013 Andre Auzi <aauzi@free.fr>
+ Copyright (C) 2013 Christian Dywan <christian@twotoats.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ See the file COPYING for the full license text.
+*/
+
+namespace Midori {
+ public class BookmarksDatabase : Midori.Database {
+ public BookmarksDatabase () throws DatabaseError {
+ Object (path: "bookmarks.db");
+ preinit ();
+ init ();
+ exec ("PRAGMA foreign_keys = ON;");
+ }
+
+ protected void preinit () throws DatabaseError {
+ string dbfile = Paths.get_config_filename_for_writing (path);
+ string olddbfile = dbfile + ".old";
+ string dbfile_v2 = Paths.get_config_filename_for_reading ("bookmarks_v2.db");
+
+ if (Posix.access (dbfile_v2, Posix.F_OK) == 0) {
+ if (Posix.access (dbfile, Posix.F_OK) == 0) {
+ if (Posix.access (olddbfile, Posix.F_OK) == 0)
+ Posix.unlink (olddbfile);
+ GLib.FileUtils.rename (dbfile, olddbfile);
+ }
+
+ GLib.FileUtils.rename (dbfile_v2, dbfile);
+
+ if (Sqlite.Database.open_v2 (dbfile, out _db) != Sqlite.OK)
+ throw new DatabaseError.OPEN ("Failed to open database %s".printf (path));
+
+ Sqlite.Statement stmt;
+ if (db.prepare_v2 ("PRAGMA user_version;", -1, out stmt, null) != Sqlite.OK)
+ throw new DatabaseError.EXECUTE ("Failed to compile statement %s".printf (db.errmsg ()));
+ if (stmt.step () != Sqlite.ROW)
+ throw new DatabaseError.EXECUTE ("Failed to get row %s".printf (db.errmsg ()));
+ int64 user_version = stmt.column_int64 (0);
+
+ if (user_version == 0) {
+ exec ("PRAGMA user_version = 1;");
+ }
+
+ _db = null;
+ } else if (Posix.access (dbfile, Posix.F_OK) == 0) {
+
+ if (Sqlite.Database.open_v2 (dbfile, out _db) != Sqlite.OK)
+ throw new DatabaseError.OPEN ("Failed to open database %s".printf (path));
+
+ Sqlite.Statement stmt;
+ if (db.prepare_v2 ("PRAGMA user_version;", -1, out stmt, null) != Sqlite.OK)
+ throw new DatabaseError.EXECUTE ("Failed to compile statement %s".printf (db.errmsg ()));
+ if (stmt.step () != Sqlite.ROW)
+ throw new DatabaseError.EXECUTE ("Failed to get row %s".printf (db.errmsg ()));
+ int64 user_version = stmt.column_int64 (0);
+
+ _db = null;
+
+ if (user_version == 0) {
+ if (Posix.access (olddbfile, Posix.F_OK) == 0)
+ Posix.unlink (olddbfile);
+
+ GLib.FileUtils.rename (dbfile, olddbfile);
+
+ if (Sqlite.Database.open_v2 (dbfile, out _db) != Sqlite.OK)
+ throw new DatabaseError.OPEN ("Failed to open database %s".printf (path));
+
+ exec_script ("Create");
+
+ if (db.exec ("ATTACH DATABASE '%s' AS old_db;".printf (olddbfile)) != Sqlite.OK)
+ throw new DatabaseError.EXECUTE ("Failed to attach old database : %s (%s)".printf (olddbfile, db.errmsg ()));
+
+ bool failure = false;
+ try {
+ exec_script ("Import_old_db_bookmarks");
+ } catch (DatabaseError error) {
+ if (error is DatabaseError.EXECUTE)
+ failure = true;
+ else
+ throw error;
+ }
+
+ /* try to get back to previous state */
+ if (failure)
+ exec ("ROLLBACK TRANSACTION;");
+
+ exec ("DETACH DATABASE old_db;");
+ exec ("PRAGMA user_version = 1;");
+
+ _db = null;
+ }
+ }
+ }
+ }
+}
diff --git a/midori/midori-browser.c b/midori/midori-browser.c
index c29e6a96..8f460743 100644
--- a/midori/midori-browser.c
+++ b/midori/midori-browser.c
@@ -82,7 +82,6 @@ struct _MidoriBrowser
gint last_window_width, last_window_height;
guint alloc_timeout;
- gint last_tab_size;
guint panel_timeout;
MidoriWebSettings* settings;
@@ -91,6 +90,7 @@ struct _MidoriBrowser
KatzeArray* trash;
KatzeArray* search_engines;
KatzeArray* history;
+ MidoriHistoryDatabase* history_database;
MidoriSpeedDial* dial;
gboolean show_tabs;
@@ -178,10 +178,6 @@ static void
midori_bookmarkbar_clear (GtkWidget* toolbar);
static void
-midori_browser_new_history_item (MidoriBrowser* browser,
- KatzeItem* item);
-
-static void
_midori_browser_set_toolbar_style (MidoriBrowser* browser,
MidoriToolbarStyle toolbar_style);
@@ -202,11 +198,6 @@ static void
midori_browser_add_speed_dial (MidoriBrowser* browser);
static void
-midori_browser_notebook_size_allocate_cb (GtkWidget* notebook,
- GdkRectangle* allocation,
- MidoriBrowser* browser);
-
-static void
midori_browser_step_history (MidoriBrowser* browser,
MidoriView* view);
@@ -220,6 +211,10 @@ midori_browser_step_history (MidoriBrowser* browser,
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION ( \
_action_by_name (brwsr, nme)), actv);
+static void
+midori_browser_disconnect_tab (MidoriBrowser* browser,
+ MidoriView* view);
+
static gboolean
midori_browser_is_fullscreen (MidoriBrowser* browser)
{
@@ -236,15 +231,7 @@ _toggle_tabbar_smartly (MidoriBrowser* browser,
gboolean show_tabs = !midori_browser_is_fullscreen (browser) || ignore_fullscreen;
if (!browser->show_tabs)
show_tabs = FALSE;
-#ifdef HAVE_GRANITE
- granite_widgets_dynamic_notebook_set_show_tabs (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook), show_tabs);
-#else
- if (!(has_tabs || katze_object_get_boolean (browser->settings, "always-show-tabbar")))
- show_tabs = FALSE;
- gtk_notebook_set_show_tabs (GTK_NOTEBOOK (browser->notebook), show_tabs);
- gtk_notebook_set_show_border (GTK_NOTEBOOK (browser->notebook), show_tabs);
-#endif
+ midori_notebook_set_labels_visible (MIDORI_NOTEBOOK (browser->notebook), show_tabs);
return has_tabs;
}
@@ -311,6 +298,8 @@ _midori_browser_update_interface (MidoriBrowser* browser,
midori_tab_can_view_source (MIDORI_TAB (view)));
_action_set_sensitive (browser, "SourceView",
midori_tab_can_view_source (MIDORI_TAB (view)));
+ _action_set_sensitive (browser, "SourceViewDom",
+ midori_tab_can_view_source (MIDORI_TAB (view)));
action = _action_by_name (browser, "NextForward");
if (midori_tab_can_go_forward (MIDORI_TAB (view)))
@@ -449,8 +438,7 @@ _midori_browser_update_progress (MidoriBrowser* browser,
"tooltip", _("Stop loading the current page"), NULL);
}
- gtk_widget_set_sensitive (browser->throbber, loading);
- katze_throbber_set_animated (KATZE_THROBBER (browser->throbber), loading);
+ g_object_set (browser->throbber, "active", loading, "visible", loading, NULL);
}
/**
@@ -757,7 +745,7 @@ midori_browser_step_history (MidoriBrowser* browser,
{
if (midori_view_get_load_status (view) != MIDORI_LOAD_COMMITTED)
return;
- if (!browser->history || !browser->maximum_history_age)
+ if (!browser->history_database || !browser->maximum_history_age)
return;
KatzeItem* proxy = midori_view_get_proxy_item (view);
@@ -768,8 +756,24 @@ midori_browser_step_history (MidoriBrowser* browser,
if (katze_item_get_meta_integer (proxy, "history-step") == -1
&& !katze_item_get_meta_boolean (proxy, "dont-write-history"))
{
- midori_browser_new_history_item (browser, proxy);
+ GError* error = NULL;
+ time_t now = time (NULL);
+ katze_item_set_added (proxy, now);
+ gint64 day = sokoke_time_t_to_julian (&now);
+ midori_history_database_insert (browser->history_database,
+ katze_item_get_uri (proxy),
+ katze_item_get_name (proxy),
+ katze_item_get_added (proxy), day, &error);
+ if (error != NULL)
+ {
+ g_printerr (_("Failed to insert new history item: %s\n"), error->message);
+ g_error_free (error);
+ return;
+ }
katze_item_set_meta_integer (proxy, "history-step", 1);
+ /* FIXME: No signal for adding/ removing */
+ katze_array_add_item (browser->history, proxy);
+ katze_array_remove_item (browser->history, proxy);
}
else if (katze_item_get_name (proxy)
&& katze_item_get_meta_integer (proxy, "history-step") >= 1)
@@ -780,23 +784,6 @@ midori_browser_step_history (MidoriBrowser* browser,
}
static void
-midori_view_notify_minimized_cb (GtkWidget* widget,
- GParamSpec* pspec,
- MidoriBrowser* browser)
-{
- if (katze_object_get_boolean (widget, "minimized"))
- {
- #ifndef HAVE_GRANITE
- GtkNotebook* notebook = GTK_NOTEBOOK (browser->notebook);
- GtkWidget* label = gtk_notebook_get_tab_label (notebook, widget);
- gtk_widget_set_size_request (label, -1, -1);
- #endif
- }
- else
- midori_browser_notebook_size_allocate_cb (NULL, NULL, browser);
-}
-
-static void
midori_view_notify_zoom_level_cb (GtkWidget* view,
GParamSpec* pspec,
MidoriBrowser* browser)
@@ -1356,12 +1343,12 @@ midori_browser_save_uri (MidoriBrowser* browser,
if (!file_only)
{
gchar* fullname = g_strconcat (filename, ".html", NULL);
- midori_view_save_source (view, uri, fullname);
+ midori_view_save_source (view, uri, fullname, FALSE);
g_free (fullname);
midori_browser_save_resources (resources, filename);
}
else
- midori_view_save_source (view, uri, filename);
+ midori_view_save_source (view, uri, filename, FALSE);
katze_assign (last_dir,
gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog)));
}
@@ -1399,6 +1386,25 @@ midori_browser_tab_leave_notify_event_cb (GtkWidget* widget,
}
static void
+midori_view_destroy_cb (GtkWidget* view,
+ MidoriBrowser* browser)
+{
+ if (browser->proxy_array)
+ {
+ KatzeItem* item = midori_view_get_proxy_item (MIDORI_VIEW (view));
+ if (katze_array_get_item_index (browser->proxy_array, item) != -1
+ && !midori_tab_is_blank (MIDORI_TAB (view)))
+ {
+ if (browser->trash)
+ katze_array_add_item (browser->trash, item);
+ midori_browser_update_history (item, "website", "leave");
+ }
+ midori_browser_disconnect_tab (browser, MIDORI_VIEW (view));
+ g_signal_emit (browser, signals[REMOVE_TAB], 0, view);
+ }
+}
+
+static void
midori_view_attach_inspector_cb (GtkWidget* view,
GtkWidget* inspector_view,
MidoriBrowser* browser)
@@ -1535,6 +1541,10 @@ midori_view_new_window_cb (GtkWidget* view,
}
static void
+_midori_browser_set_toolbar_items (MidoriBrowser* browser,
+ const gchar* items);
+
+static void
midori_view_new_view_cb (GtkWidget* view,
GtkWidget* new_view,
MidoriNewView where,
@@ -1549,19 +1559,15 @@ midori_view_new_view_cb (GtkWidget* view,
g_assert (new_browser != NULL);
gtk_window_set_transient_for (GTK_WINDOW (new_browser), GTK_WINDOW (browser));
gtk_window_set_destroy_with_parent (GTK_WINDOW (new_browser), TRUE);
- MidoriWebSettings* settings = midori_web_settings_new ();
- g_object_set (settings,
- "toolbar-items", "Location",
- "show-menubar", FALSE,
- "show-bookmarkbar", FALSE,
- "show-statusbar", FALSE,
- NULL);
g_object_set (new_browser,
- "settings", settings,
"show-tabs", FALSE,
NULL);
- g_object_unref (settings);
+ sokoke_widget_set_visible (new_browser->menubar, FALSE);
+ sokoke_widget_set_visible (new_browser->bookmarkbar, FALSE);
+ sokoke_widget_set_visible (new_browser->statusbar, FALSE);
_action_set_visible (new_browser, "CompactMenu", FALSE);
+ _midori_browser_set_toolbar_items (new_browser, "Location");
+ sokoke_widget_set_visible (new_browser->panel, FALSE);
midori_browser_add_tab (new_browser, new_view);
midori_browser_set_current_tab (new_browser, new_view);
return;
@@ -1783,98 +1789,14 @@ midori_view_search_text_cb (GtkWidget* view,
gint
midori_browser_get_n_pages (MidoriBrowser* browser)
{
- #ifdef HAVE_GRANITE
- return granite_widgets_dynamic_notebook_get_n_tabs (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook));
- #else
- return gtk_notebook_get_n_pages (GTK_NOTEBOOK (browser->notebook));
- #endif
-}
-
-static void
-midori_browser_disconnect_tab (MidoriBrowser* browser,
- MidoriView* view);
-
-static gboolean
-midori_browser_tab_connected (MidoriBrowser* browser,
- MidoriView* view)
-{
- return browser->proxy_array &&
- (katze_array_get_item_index (browser->proxy_array, midori_view_get_proxy_item (view)) != -1);
+ return midori_notebook_get_count (MIDORI_NOTEBOOK (browser->notebook));
}
static void
_midori_browser_remove_tab (MidoriBrowser* browser,
GtkWidget* widget)
{
- MidoriView* view = MIDORI_VIEW (widget);
-#ifdef HAVE_GRANITE
- granite_widgets_dynamic_notebook_remove_tab (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook), midori_view_get_tab (view));
-#else
gtk_widget_destroy (widget);
-#endif
- if (midori_browser_tab_connected (browser, view))
- midori_browser_disconnect_tab (browser, view);
-}
-
-#ifndef HAVE_GRANITE
-static void
-midori_browser_notebook_resize (MidoriBrowser* browser,
- GdkRectangle* allocation)
-{
- gint new_size = 0;
- gint n = MAX (1, gtk_notebook_get_n_pages (GTK_NOTEBOOK (browser->notebook)));
- const gint max_size = 150;
- gint min_size;
- gint icon_size = 16;
- GtkAllocation notebook_size;
- GList* children;
-
- if (allocation != NULL)
- notebook_size.width = allocation->width;
- else
- gtk_widget_get_allocation (browser->notebook, &notebook_size);
- new_size = notebook_size.width / n;
-
- gtk_icon_size_lookup_for_settings (gtk_widget_get_settings (browser->notebook),
- GTK_ICON_SIZE_MENU, &icon_size, NULL);
- min_size = icon_size;
- if (katze_object_get_boolean (browser->settings, "close-buttons-on-tabs"))
- min_size += icon_size;
- if (new_size < min_size) new_size = min_size;
- if (new_size > max_size) new_size = max_size;
-
- if (new_size > browser->last_tab_size - 3
- && new_size < browser->last_tab_size + 3)
- return;
- browser->last_tab_size = new_size;
-
- children = gtk_container_get_children (GTK_CONTAINER (browser->notebook));
- for (; children; children = g_list_next (children))
- {
- GtkWidget* view = children->data;
- GtkWidget* label;
- label = gtk_notebook_get_tab_label (GTK_NOTEBOOK(browser->notebook), view);
- /* Don't resize empty bin, which is used for thumbnail tabs */
- if (GTK_IS_BIN (label) && gtk_bin_get_child (GTK_BIN (label))
- && !katze_object_get_boolean (view, "minimized"))
- gtk_widget_set_size_request (label, new_size, -1);
- }
-}
-#endif
-
-static void
-midori_browser_notebook_size_allocate_cb (GtkWidget* widget,
- GdkRectangle* allocation,
- MidoriBrowser* browser)
-{
- #ifndef HAVE_GRANITE
- if (!gtk_notebook_get_show_tabs (GTK_NOTEBOOK (browser->notebook)))
- return;
-
- midori_browser_notebook_resize (browser, allocation);
- #endif
}
static void
@@ -1884,7 +1806,6 @@ midori_browser_connect_tab (MidoriBrowser* browser,
KatzeItem* item = midori_view_get_proxy_item (MIDORI_VIEW (view));
katze_array_add_item (browser->proxy_array, item);
- gtk_widget_set_can_focus (view, TRUE);
g_object_connect (view,
"signal::notify::icon",
midori_view_notify_icon_cb, browser,
@@ -1896,8 +1817,6 @@ midori_browser_connect_tab (MidoriBrowser* browser,
midori_view_notify_uri_cb, browser,
"signal::notify::title",
midori_view_notify_title_cb, browser,
- "signal::notify::minimized",
- midori_view_notify_minimized_cb, browser,
"signal::notify::zoom-level",
midori_view_notify_zoom_level_cb, browser,
"signal::notify::statusbar-text",
@@ -1918,30 +1837,12 @@ midori_browser_connect_tab (MidoriBrowser* browser,
midori_view_search_text_cb, browser,
"signal::leave-notify-event",
midori_browser_tab_leave_notify_event_cb, browser,
+ "signal::destroy",
+ midori_view_destroy_cb, browser,
NULL);
}
static void
-midori_browser_add_tab_to_trash (MidoriBrowser* browser,
- MidoriView* view)
-{
- if (browser->proxy_array)
- {
- KatzeItem* item = midori_view_get_proxy_item (view);
- if (katze_array_get_item_index (browser->proxy_array, item) != -1)
- {
- if (!midori_view_is_blank (view))
- {
- if (browser->trash)
- katze_array_add_item (browser->trash, item);
- midori_browser_update_history (item, "website", "leave");
- }
- }
- }
-}
-
-
-static void
midori_browser_disconnect_tab (MidoriBrowser* browser,
MidoriView* view)
{
@@ -1972,8 +1873,6 @@ midori_browser_disconnect_tab (MidoriBrowser* browser,
"any_signal",
midori_view_notify_title_cb, browser,
"any_signal",
- midori_view_notify_minimized_cb, browser,
- "any_signal",
midori_view_notify_zoom_level_cb, browser,
"any_signal",
midori_view_notify_statusbar_text_cb, browser,
@@ -2000,11 +1899,7 @@ static void
_midori_browser_add_tab (MidoriBrowser* browser,
GtkWidget* view)
{
- GtkWidget* notebook = browser->notebook;
KatzeItem* item = midori_view_get_proxy_item (MIDORI_VIEW (view));
- #ifndef HAVE_GRANITE
- GtkWidget* tab_label;
- #endif
guint n;
midori_browser_connect_tab (browser, view);
@@ -2016,24 +1911,10 @@ _midori_browser_add_tab (MidoriBrowser* browser,
katze_array_move_item (browser->proxy_array, item, n);
}
else
- n = midori_browser_get_n_pages (browser);
+ n = -1;
katze_item_set_meta_integer (item, "append", -1);
-#ifdef HAVE_GRANITE
- granite_widgets_dynamic_notebook_insert_tab (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (notebook),
- midori_view_get_tab (MIDORI_VIEW (view)), n);
-#else
- tab_label = midori_view_get_proxy_tab_label (MIDORI_VIEW (view));
- /* Don't resize empty bin, which is used for thumbnail tabs */
- if (GTK_IS_BIN (tab_label) && gtk_bin_get_child (GTK_BIN (tab_label))
- && !katze_object_get_boolean (view, "minimized"))
- gtk_widget_set_size_request (tab_label, browser->last_tab_size, -1);
- gtk_notebook_insert_page (GTK_NOTEBOOK (notebook), view, tab_label, n);
- gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (notebook), view, TRUE);
- gtk_notebook_set_tab_detachable (GTK_NOTEBOOK (notebook), view, TRUE);
- midori_browser_notebook_size_allocate_cb (browser->notebook, NULL, browser);
-#endif
+ midori_notebook_insert (MIDORI_NOTEBOOK (browser->notebook), MIDORI_TAB (view), n);
_midori_browser_update_actions (browser);
}
@@ -2052,7 +1933,6 @@ midori_browser_key_press_event (GtkWidget* widget,
MidoriBrowser* browser = MIDORI_BROWSER (widget);
GtkWidgetClass* widget_class;
guint clean_state;
- GtkWidget* focus;
/* Interpret Ctrl(+Shift)+Tab as tab switching for compatibility */
if (midori_browser_get_nth_tab (browser, 1) != NULL
@@ -2084,7 +1964,7 @@ midori_browser_key_press_event (GtkWidget* widget,
}
#ifndef HAVE_WEBKIT2
- focus = gtk_window_get_focus (GTK_WINDOW (widget));
+ GtkWidget* focus = gtk_window_get_focus (GTK_WINDOW (widget));
if (focus == NULL)
gtk_widget_grab_focus (midori_browser_get_current_tab (MIDORI_BROWSER (widget)));
else if (G_OBJECT_TYPE (focus) == WEBKIT_TYPE_WEB_VIEW
@@ -2848,32 +2728,7 @@ _action_print_activate (GtkAction* action,
{
GtkWidget* view = midori_browser_get_current_tab (browser);
- #if 0 // def HAVE_GRANITE
- /* FIXME: Blacklist/ custom contract doesn't work
- gchar* blacklisted_contracts[] = { "print", NULL }; */
- /* FIXME: granite: should return GtkWidget* like GTK+ */
- GtkWidget* dialog = (GtkWidget*)granite_widgets_light_window_new (_("Share this page"));
- /* FIXME: granite: should return GtkWidget* like GTK+ */
- GtkWidget* content_area = (GtkWidget*)granite_widgets_decorated_window_get_box (GRANITE_WIDGETS_DECORATED_WINDOW (dialog));
- gchar* filename = midori_view_save_source (MIDORI_VIEW (view), NULL, NULL);
- const gchar* mime_type = katze_item_get_meta_string (
- midori_view_get_proxy_item (MIDORI_VIEW (view)), "mime-type");
- GtkWidget* contractor = (GtkWidget*)granite_widgets_contractor_view_new (
- filename, mime_type, 32, TRUE);
- /* granite_widgets_contractor_view_add_item (GRANITE_WIDGETS_CONTRACTOR_VIEW (
- contractor), _("_Print"), _("Send document to the printer"), "document-print",
- 32, G_MAXINT, midori_view_print, view);
- granite_widgets_contractor_view_name_blacklist (GRANITE_WIDGETS_CONTRACTOR_VIEW (
- contractor), blacklisted_contracts, -1); */
- g_free (filename);
- gtk_box_pack_start (GTK_BOX (content_area), contractor, TRUE, TRUE, 0);
- gtk_widget_show (contractor);
- gtk_widget_show (dialog);
- /* FIXME: granite: "box" isn't visible by default */
- gtk_widget_show_all (dialog);
- #else
midori_view_print (MIDORI_VIEW (view));
- #endif
}
static void
@@ -3356,8 +3211,8 @@ _action_compact_menu_populate_popup (GtkAction* action,
midori_context_action_add_by_name (menu, "HelpFAQ");
midori_context_action_add_by_name (menu, "HelpBugs");
#endif
- midori_context_action_add_by_name (menu, "About");
midori_context_action_add_by_name (menu, "Preferences");
+ midori_context_action_add_by_name (menu, "About");
midori_context_action_create_menu (menu, default_menu, FALSE);
}
@@ -3578,15 +3433,16 @@ _action_view_encoding_activate (GtkAction* action,
}
static void
-_action_source_view_activate (GtkAction* action,
- MidoriBrowser* browser)
+_action_source_view (GtkAction* action,
+ MidoriBrowser* browser,
+ gboolean use_dom)
{
GtkWidget* view;
gchar* text_editor;
gchar* filename = NULL;
view = midori_browser_get_current_tab (browser);
- filename = midori_view_save_source (MIDORI_VIEW (view), NULL, NULL);
+ filename = midori_view_save_source (MIDORI_VIEW (view), NULL, NULL, use_dom);
g_object_get (browser->settings, "text-editor", &text_editor, NULL);
if (!(text_editor && *text_editor))
{
@@ -3612,6 +3468,21 @@ _action_source_view_activate (GtkAction* action,
}
static void
+_action_source_view_activate (GtkAction* action,
+ MidoriBrowser* browser)
+{
+ _action_source_view (action, browser, FALSE);
+}
+
+static void
+_action_source_view_dom_activate (GtkAction* action,
+ MidoriBrowser* browser)
+{
+ _action_source_view (action, browser, TRUE);
+}
+
+
+static void
_action_caret_browsing_activate (GtkAction* action,
MidoriBrowser* browser)
{
@@ -3680,13 +3551,7 @@ _action_fullscreen_activate (GtkAction* action,
gtk_widget_hide (browser->bookmarkbar);
gtk_widget_hide (browser->navigationbar);
gtk_widget_hide (browser->statusbar);
- #ifdef HAVE_GRANITE
- granite_widgets_dynamic_notebook_set_show_tabs (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook), FALSE);
- #else
- gtk_notebook_set_show_tabs (GTK_NOTEBOOK (browser->notebook), FALSE);
- gtk_notebook_set_show_border (GTK_NOTEBOOK (browser->notebook), FALSE);
- #endif
+ midori_notebook_set_labels_visible (MIDORI_NOTEBOOK (browser->notebook), FALSE);
gtk_window_fullscreen (GTK_WINDOW (browser));
}
@@ -3802,8 +3667,9 @@ _action_navigation_activate (GtkAction* action,
WebKitWebHistoryItem* item = webkit_web_back_forward_list_get_forward_item (list);
const gchar* back_uri = webkit_web_history_item_get_uri (item);
#endif
- GtkWidget* view = midori_browser_add_uri (browser, back_uri);
- midori_browser_set_current_tab_smartly (browser, view);
+
+ GtkWidget* new_view = midori_browser_add_uri (browser, back_uri);
+ midori_browser_set_current_tab_smartly (browser, new_view);
}
else
midori_view_go_back (view);
@@ -3824,8 +3690,9 @@ _action_navigation_activate (GtkAction* action,
WebKitWebHistoryItem* item = webkit_web_back_forward_list_get_forward_item (list);
const gchar* forward_uri = webkit_web_history_item_get_uri (item);
#endif
- GtkWidget* view = midori_browser_add_uri (browser, forward_uri);
- midori_browser_set_current_tab_smartly (browser, view);
+
+ GtkWidget* new_view = midori_browser_add_uri (browser, forward_uri);
+ midori_browser_set_current_tab_smartly (browser, new_view);
}
else
midori_tab_go_forward (MIDORI_TAB (view));
@@ -3839,8 +3706,8 @@ _action_navigation_activate (GtkAction* action,
if (middle_click)
{
- GtkWidget* view = midori_browser_add_uri (browser, uri);
- midori_browser_set_current_tab_smartly (browser, view);
+ GtkWidget* new_view = midori_browser_add_uri (browser, uri);
+ midori_browser_set_current_tab_smartly (browser, new_view);
}
else
midori_view_set_uri (view, uri);
@@ -3855,8 +3722,8 @@ _action_navigation_activate (GtkAction* action,
if (middle_click)
{
- GtkWidget* view = midori_browser_add_uri (browser, uri);
- midori_browser_set_current_tab_smartly (browser, view);
+ GtkWidget* new_view = midori_browser_add_uri (browser, uri);
+ midori_browser_set_current_tab_smartly (browser, new_view);
}
else
midori_view_set_uri (view, uri);
@@ -3868,8 +3735,8 @@ _action_navigation_activate (GtkAction* action,
{
if (middle_click)
{
- GtkWidget* view = midori_browser_add_uri (browser, "about:home");
- midori_browser_set_current_tab_smartly (browser, view);
+ GtkWidget* new_view = midori_browser_add_uri (browser, "about:home");
+ midori_browser_set_current_tab_smartly (browser, new_view);
}
else
midori_view_set_uri (view, "about:home");
@@ -3965,7 +3832,6 @@ _action_location_submit_uri (GtkAction* action,
MidoriBrowser* browser)
{
gchar* new_uri;
- gint n;
/* Switch to already open tab if possible */
KatzeItem* found = katze_array_find_uri (browser->proxy_array, uri);
@@ -4241,7 +4107,6 @@ midori_browser_bookmark_open_in_tab_activate_cb (GtkWidget* menuitem,
{
KatzeItem* item;
const gchar* uri;
- guint n;
item = (KatzeItem*)g_object_get_data (G_OBJECT (menuitem), "KatzeItem");
if (KATZE_IS_ARRAY (item))
@@ -4618,11 +4483,15 @@ wrong_format:
if (midori_dialog_run (GTK_DIALOG (file_dialog)) == GTK_RESPONSE_OK)
path = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_dialog));
gtk_widget_destroy (file_dialog);
+
+ if (path == NULL)
+ return;
+
if (g_str_has_suffix (path, ".xbel"))
format = "xbel";
else if (g_str_has_suffix (path, ".html"))
format = "netscape";
- else if (path != NULL)
+ else
{
sokoke_message_dialog (GTK_MESSAGE_ERROR,
_("Midori can only export to XBEL (*.xbel) and Netscape (*.html)"),
@@ -4631,9 +4500,6 @@ wrong_format:
goto wrong_format;
}
- if (path == NULL)
- return;
-
error = NULL;
bookmarks = midori_bookmarks_db_query_recursive (browser->bookmarks,
"*", "parentid IS NULL", NULL, TRUE);
@@ -4723,13 +4589,7 @@ _action_tab_move_activate (GtkAction* action,
else
g_assert_not_reached ();
- #ifdef HAVE_GRANITE
- granite_widgets_dynamic_notebook_set_tab_position (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook),
- midori_view_get_tab (MIDORI_VIEW (widget)), new_pos);
- #else
- gtk_notebook_reorder_child (GTK_NOTEBOOK (browser->notebook), widget, new_pos);
- #endif
+ midori_notebook_move (MIDORI_NOTEBOOK (browser->notebook), MIDORI_TAB (widget), new_pos);
g_signal_emit (browser, signals[MOVE_TAB], 0, browser->notebook, cur_pos, new_pos);
}
@@ -4780,7 +4640,9 @@ static void
_action_tab_duplicate_activate (GtkAction* action,
MidoriBrowser* browser)
{
- GtkWidget* view = midori_browser_get_current_tab (browser);
+ GtkWidget* view = g_object_get_data (G_OBJECT (action), "tab");
+ if (view == NULL)
+ view = midori_browser_get_current_tab (browser);
midori_view_duplicate (MIDORI_VIEW (view));
}
@@ -5016,10 +4878,10 @@ midori_panel_close_cb (MidoriPanel* panel,
}
static void
-midori_browser_switched_tab (MidoriBrowser* browser,
- GtkWidget* old_widget,
- MidoriView* new_view,
- gint new_page)
+midori_browser_switched_tab_cb (MidoriNotebook* notebook,
+ GtkWidget* old_widget,
+ MidoriView* new_view,
+ MidoriBrowser* browser)
{
GtkAction* action;
const gchar* text;
@@ -5033,13 +4895,8 @@ midori_browser_switched_tab (MidoriBrowser* browser,
g_strdup (text), g_free);
}
- if (new_view == NULL)
- {
- g_signal_emit (browser, signals[SWITCH_TAB], 0, old_widget, new_view);
- return;
- }
-
g_return_if_fail (MIDORI_IS_VIEW (new_view));
+ g_return_if_fail (new_view != MIDORI_VIEW (old_widget));
uri = g_object_get_data (G_OBJECT (new_view), "midori-browser-typed-text");
if (!uri)
@@ -5050,9 +4907,10 @@ midori_browser_switched_tab (MidoriBrowser* browser,
if (midori_paths_get_runtime_mode () == MIDORI_RUNTIME_MODE_APP)
gtk_window_set_icon (GTK_WINDOW (browser), midori_view_get_icon (new_view));
- if (browser->proxy_array)
- katze_item_set_meta_integer (KATZE_ITEM (browser->proxy_array), "current", new_page);
+ g_object_freeze_notify (G_OBJECT (browser));
+ g_object_notify (G_OBJECT (browser), "uri");
g_object_notify (G_OBJECT (browser), "tab");
+ g_object_thaw_notify (G_OBJECT (browser));
g_signal_emit (browser, signals[SWITCH_TAB], 0, old_widget, new_view);
_midori_browser_set_statusbar_text (browser, new_view, NULL);
@@ -5061,17 +4919,17 @@ midori_browser_switched_tab (MidoriBrowser* browser,
}
static void
-midori_browser_notebook_page_reordered_cb (GtkWidget* notebook,
- MidoriView* view,
- guint page_num,
- MidoriBrowser* browser)
+midori_browser_tab_moved_cb (GtkWidget* notebook,
+ MidoriView* view,
+ guint page_num,
+ MidoriBrowser* browser)
{
KatzeItem* item = midori_view_get_proxy_item (view);
katze_array_move_item (browser->proxy_array, item, page_num);
g_object_notify (G_OBJECT (browser), "tab");
}
-static GtkWidget*
+static void
midori_browser_notebook_create_window_cb (GtkWidget* notebook,
GtkWidget* view,
gint x,
@@ -5082,216 +4940,53 @@ midori_browser_notebook_create_window_cb (GtkWidget* notebook,
g_signal_emit (browser, signals[NEW_WINDOW], 0, NULL, &new_browser);
if (new_browser)
{
- GtkWidget* new_notebook = new_browser->notebook;
gtk_window_move (GTK_WINDOW (new_browser), x, y);
- return new_notebook;
- }
- else /* No MidoriApp, so this is app or private mode */
- return NULL;
-}
-
-#ifdef HAVE_GRANITE
-static void
-midori_browser_notebook_tab_added_cb (GtkWidget* notebook,
- GraniteWidgetsTab* tab,
- MidoriBrowser* browser)
-{
- gint n = granite_widgets_dynamic_notebook_get_tab_position (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (notebook), tab);
- midori_browser_set_current_page (browser, n);
- GtkWidget* view = midori_view_new_with_item (NULL, browser->settings);
- midori_view_set_tab (MIDORI_VIEW (view), tab);
- midori_browser_connect_tab (browser, view);
- midori_view_set_uri (MIDORI_VIEW (view), "about:new");
- /* FIXME: signal add-tab */
- _midori_browser_update_actions (browser);
- midori_browser_notebook_page_reordered_cb (GTK_WIDGET (notebook),
- MIDORI_VIEW (view), n, browser);
-}
-
-static gboolean
-midori_browser_notebook_tab_removed_cb (GtkWidget* notebook,
- GraniteWidgetsTab* tab,
- MidoriBrowser* browser)
-{
-
- MidoriView* view = MIDORI_VIEW (granite_widgets_tab_get_page (tab));
- if (midori_browser_tab_connected (browser, MIDORI_VIEW (view)))
+ g_object_ref (view);
midori_browser_disconnect_tab (browser, MIDORI_VIEW (view));
-
- return TRUE;
-}
-
-static void
-midori_browser_move_tab_to_notebook (MidoriBrowser* browser,
- GtkWidget* view,
- GraniteWidgetsTab* tab,
- GtkWidget* new_notebook)
-{
- GraniteWidgetsTab* new_tab = granite_widgets_tab_new ("", NULL, NULL);
- g_object_ref (view);
- _midori_browser_remove_tab (browser, view);
- granite_widgets_dynamic_notebook_insert_tab (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (new_notebook), new_tab, 0);
- midori_view_set_tab (MIDORI_VIEW (view), new_tab);
- _midori_browser_update_actions (browser);
- midori_browser_connect_tab (midori_browser_get_for_widget (new_notebook), view);
- g_object_unref (view);
-}
-
-static void
-midori_browser_notebook_tab_switched_cb (GraniteWidgetsDynamicNotebook* notebook,
- GraniteWidgetsTab* old_tab,
- GraniteWidgetsTab* new_tab,
- MidoriBrowser* browser)
-{
- gint new_pos = granite_widgets_dynamic_notebook_get_tab_position (notebook, new_tab);
-
- midori_browser_switched_tab (browser,
- old_tab ? granite_widgets_tab_get_page (old_tab) : NULL,
- MIDORI_VIEW (granite_widgets_tab_get_page (new_tab)), new_pos);
-}
-
-static void
-midori_browser_notebook_tab_moved_cb (GtkWidget* notebook,
- GraniteWidgetsTab* tab,
- gint old_pos,
- gboolean new_window,
- gint x,
- gint y,
- MidoriBrowser* browser)
-{
- GtkWidget* view = granite_widgets_tab_get_page (tab);
- if (new_window)
- {
- GtkWidget* notebook = midori_browser_notebook_create_window_cb (
- browser->notebook, view, x, y, browser);
- if (notebook != NULL)
- midori_browser_move_tab_to_notebook (browser, view, tab, notebook);
- }
- else
- {
- gint new_pos = granite_widgets_dynamic_notebook_get_tab_position (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (notebook), tab);
- midori_browser_notebook_page_reordered_cb (notebook,
- MIDORI_VIEW (view), new_pos, browser);
+ midori_notebook_remove (MIDORI_NOTEBOOK (browser->notebook), MIDORI_TAB (view));
+ midori_browser_add_tab (new_browser, view);
+ g_object_unref (view);
}
}
static void
-midori_browser_notebook_tab_duplicated_cb (GtkWidget* notebook,
- GraniteWidgetsTab* tab,
- MidoriBrowser* browser)
-{
- GtkWidget* view = granite_widgets_tab_get_page (tab);
- midori_view_duplicate (MIDORI_VIEW (view));
-}
-
-#else
-static void
-midori_browser_notebook_page_added_cb (GtkNotebook* notebook,
- GtkWidget* child,
- guint page_num,
- MidoriBrowser* browser)
-{
- if (!midori_browser_tab_connected (browser, MIDORI_VIEW (child)))
- midori_browser_connect_tab (browser, child);
- midori_browser_notebook_page_reordered_cb (GTK_WIDGET (notebook),
- MIDORI_VIEW (child), page_num, browser);
-}
-
-static void
-midori_browser_notebook_switch_page_cb (GtkWidget* notebook,
- gpointer page,
- guint page_num,
- MidoriBrowser* browser)
+midori_browser_notebook_new_tab_cb (GtkWidget* notebook,
+ MidoriBrowser* browser)
{
- midori_browser_switched_tab (browser,
- midori_browser_get_current_tab (browser),
- MIDORI_VIEW (midori_browser_get_nth_tab (browser, page_num)), page_num);
+ GtkWidget* view = midori_browser_add_uri (browser, "about:new");
+ midori_browser_set_current_tab (browser, view);
}
static void
-midori_browser_notebook_page_removed_cb (GtkWidget* notebook,
- GtkWidget* view,
- guint page_num,
- MidoriBrowser* browser)
-{
- if (midori_browser_tab_connected (browser, MIDORI_VIEW (view)))
- midori_browser_disconnect_tab (browser, MIDORI_VIEW (view));
- midori_browser_notebook_size_allocate_cb (browser->notebook, NULL, browser);
-}
-
-static gboolean
-midori_browser_notebook_reorder_tab_cb (GtkNotebook* notebook,
- GtkDirectionType arg1,
- gboolean arg2,
- gpointer user_data)
+midori_browser_notebook_context_menu_cb (MidoriNotebook* notebook,
+ MidoriContextAction* menu,
+ MidoriBrowser* browser)
{
- g_signal_stop_emission_by_name (notebook, "reorder-tab");
- return TRUE;
+ midori_context_action_add_action_group (menu, browser->action_group);
+ midori_context_action_add (menu, NULL);
+ midori_context_action_add_by_name (menu, "TabNew");
+ midori_context_action_add_by_name (menu, "UndoTabClose");
}
static void
-midori_browser_menu_item_switch_tab_cb (GtkWidget* menuitem,
- MidoriBrowser* browser)
+midori_browser_notebook_tab_context_menu_cb (MidoriNotebook* notebook,
+ MidoriTab* tab,
+ MidoriContextAction* menu,
+ MidoriBrowser* browser)
{
- gint page = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menuitem), "index"));
- midori_browser_set_current_page (browser, page);
-}
-
-static gboolean
-midori_browser_notebook_button_press_event_after_cb (GtkNotebook* notebook,
- GdkEventButton* event,
- MidoriBrowser* browser)
-{
-#if !GTK_CHECK_VERSION(3,0,0) /* TODO */
- if (event->window != notebook->event_window)
- return FALSE;
-#endif
-
- /* FIXME: Handle double click only when it wasn't handled by GtkNotebook */
-
- /* Open a new tab on double click or middle mouse click */
- if (/*(event->type == GDK_2BUTTON_PRESS && event->button == 1)
- || */(event->type == GDK_BUTTON_PRESS && MIDORI_EVENT_NEW_TAB (event)))
- {
- GtkWidget* view = midori_browser_add_uri (browser, "about:new");
- midori_browser_set_current_tab (browser, view);
-
- return TRUE;
- }
- else if (event->type == GDK_BUTTON_PRESS && MIDORI_EVENT_CONTEXT_MENU (event))
+ midori_context_action_add_action_group (menu, browser->action_group);
+ midori_context_action_add (menu, NULL);
+ midori_context_action_add_by_name (menu, "TabNew");
+ midori_context_action_add_by_name (menu, "UndoTabClose");
+ if (MIDORI_IS_VIEW (tab))
{
- MidoriContextAction* menu = midori_context_action_new ("NotebookContextMenu", NULL, NULL, NULL);
- midori_context_action_add_action_group (menu, browser->action_group);
- GList* tabs = midori_browser_get_tabs (browser);
- midori_context_action_add_by_name (menu, "TabNew");
- midori_context_action_add_by_name (menu, "UndoTabClose");
- midori_context_action_add (menu, NULL);
- gint i = 0;
- for (; tabs != NULL; tabs = g_list_next (tabs))
- {
- const gchar* title = midori_view_get_display_title (tabs->data);
- gchar* tab_option = g_strdup_printf ("Tab%u", i);
- GtkAction* action = gtk_action_new (tab_option, title, NULL, NULL);
- g_free (tab_option);
- gtk_action_set_gicon (GTK_ACTION (action), G_ICON (midori_view_get_icon (tabs->data)));
- g_object_set_data (G_OBJECT (action), "index", GINT_TO_POINTER (i));
- g_signal_connect (action, "activate",
- G_CALLBACK (midori_browser_menu_item_switch_tab_cb), browser);
- midori_context_action_add (menu, action);
- i++;
- }
- g_list_free (tabs);
- GtkMenu* context_menu = midori_context_action_create_menu (menu, NULL, FALSE);
- katze_widget_popup (GTK_WIDGET (notebook), context_menu, NULL,
- KATZE_MENU_POSITION_CURSOR);
+ GtkAction* action = gtk_action_new ("TabDuplicate", _("_Duplicate Current Tab"), NULL, NULL);
+ g_object_set_data (G_OBJECT (action), "tab", tab);
+ g_signal_connect (action, "activate",
+ G_CALLBACK (_action_tab_duplicate_activate), browser);
+ midori_context_action_add (menu, action);
}
-
- return FALSE;
}
-#endif
static void
_action_undo_tab_close_activate (GtkAction* action,
@@ -5351,15 +5046,9 @@ static const GtkActionEntry entries[] =
{ "WindowClose", NULL,
N_("C_lose Window"), "<Ctrl><Shift>w",
NULL, G_CALLBACK (_action_window_close_activate) },
- #if 0 // def HAVE_GRANITE
- { "Print", "document-export",
- N_("_Share"), "<Ctrl>p",
- N_("Share this page"), G_CALLBACK (_action_print_activate) },
- #else
{ "Print", GTK_STOCK_PRINT,
NULL, "<Ctrl>p",
N_("Print the current page"), G_CALLBACK (_action_print_activate) },
- #endif
{ "Quit", GTK_STOCK_QUIT,
N_("Close a_ll Windows"), "<Ctrl><Shift>q",
NULL, G_CALLBACK (_action_quit_activate) },
@@ -5426,6 +5115,9 @@ static const GtkActionEntry entries[] =
{ "SourceView", NULL,
N_("View So_urce"), "<Ctrl><Alt>U",
NULL, G_CALLBACK (_action_source_view_activate) },
+ { "SourceViewDom", NULL,
+ N_("View _DOM Source"), "<Ctrl><Alt><Shift>U",
+ NULL, G_CALLBACK (_action_source_view_dom_activate) },
{ "CaretBrowsing", NULL,
N_("Ca_ret Browsing"), "F7",
NULL, G_CALLBACK (_action_caret_browsing_activate) },
@@ -5464,8 +5156,8 @@ static const GtkActionEntry entries[] =
/* i18n: Visit the following logical page, ie. in a forum or blog */
N_("Go to the next sub-page"), G_CALLBACK (_action_navigation_activate) },
{ "NextForward", GTK_STOCK_MEDIA_NEXT,
- NULL, "",
- N_("Go to the next sub-page"), G_CALLBACK (_action_navigation_activate) },
+ N_("Next or Forward"), "",
+ N_("Go to the next sub-page or next page in history"), G_CALLBACK (_action_navigation_activate) },
{ "Homepage", GTK_STOCK_HOME,
N_("_Homepage"), "<Alt>Home",
N_("Go to your homepage"), G_CALLBACK (_action_navigation_activate) },
@@ -5637,7 +5329,6 @@ midori_inactivity_timeout (gpointer data)
XScreenSaverQueryInfo (xdisplay, RootWindow (xdisplay, 0), mit_info);
if (mit_info->idle / 1000 > mit->timeout)
{
- GtkWidget* view;
midori_private_data_clear_all (mit->browser);
midori_browser_activate_action (mit->browser, "Homepage");
}
@@ -5740,14 +5431,6 @@ midori_browser_destroy_cb (MidoriBrowser* browser)
/* Destroy panel first, so panels don't need special care */
gtk_widget_destroy (browser->panel);
- #ifndef HAVE_GRANITE
- g_signal_handlers_disconnect_by_func (browser->notebook,
- midori_browser_notebook_reorder_tab_cb,
- NULL);
- g_signal_handlers_disconnect_by_func (browser->notebook,
- midori_browser_notebook_size_allocate_cb,
- browser);
- #endif
/* Destroy tabs second, so child widgets don't need special care */
gtk_container_foreach (GTK_CONTAINER (browser->notebook),
(GtkCallback) gtk_widget_destroy, NULL);
@@ -5819,6 +5502,7 @@ static const gchar* ui_markup =
"<menuitem action='EncodingCustom'/>"
"</menu>"
"<menuitem action='SourceView'/>"
+ "<menuitem action='SourceViewDom'/>"
"<menuitem action='Fullscreen'/>"
"<menuitem action='Readable'/>"
"</menu>"
@@ -5897,46 +5581,6 @@ midori_browser_realize_cb (GtkStyle* style,
}
static void
-midori_browser_new_history_item (MidoriBrowser* browser,
- KatzeItem* item)
-{
- time_t now;
- gint64 day;
- sqlite3* db;
- static sqlite3_stmt* stmt = NULL;
-
- g_return_if_fail (katze_item_get_uri (item) != NULL);
-
- now = time (NULL);
- katze_item_set_added (item, now);
- day = sokoke_time_t_to_julian (&now);
-
- db = g_object_get_data (G_OBJECT (browser->history), "db");
- g_return_if_fail (db != NULL);
- if (!stmt)
- {
- const gchar* sqlcmd;
-
- sqlcmd = "INSERT INTO history (uri, title, date, day) VALUES (?,?,?,?)";
- sqlite3_prepare_v2 (db, sqlcmd, -1, &stmt, NULL);
- }
- sqlite3_bind_text (stmt, 1, katze_item_get_uri (item), -1, 0);
- sqlite3_bind_text (stmt, 2, katze_item_get_name (item), -1, 0);
- sqlite3_bind_int64 (stmt, 3, katze_item_get_added (item));
- sqlite3_bind_int64 (stmt, 4, day);
-
- if (sqlite3_step (stmt) != SQLITE_DONE)
- g_printerr (_("Failed to insert new history item: %s\n"),
- sqlite3_errmsg (db));
- sqlite3_reset (stmt);
- sqlite3_clear_bindings (stmt);
-
- /* FIXME: Workaround for the lack of a database interface */
- katze_array_add_item (browser->history, item);
- katze_array_remove_item (browser->history, item);
-}
-
-static void
midori_browser_set_history (MidoriBrowser* browser,
KatzeArray* history)
{
@@ -5946,10 +5590,20 @@ midori_browser_set_history (MidoriBrowser* browser,
if (history)
g_object_ref (history);
katze_object_assign (browser->history, history);
+ katze_object_assign (browser->history_database, NULL);
if (!history)
return;
+ GError* error = NULL;
+ browser->history_database = midori_history_database_new (NULL, &error);
+ if (error != NULL)
+ {
+ g_printerr (_("Failed to initialize history: %s"), error->message);
+ g_printerr ("\n");
+ g_error_free (error);
+ return;
+ }
g_object_set (_action_by_name (browser, "Location"), "history",
browser->history, NULL);
}
@@ -6064,6 +5718,8 @@ midori_browser_init (MidoriBrowser* browser)
browser->settings = midori_web_settings_new ();
browser->proxy_array = katze_array_new (KATZE_TYPE_ARRAY);
browser->bookmarks = NULL;
+ browser->history = NULL;
+ browser->history_database = NULL;
browser->trash = NULL;
browser->search_engines = NULL;
browser->dial = NULL;
@@ -6267,10 +5923,17 @@ midori_browser_init (MidoriBrowser* browser)
menuitem = gtk_menu_item_new ();
gtk_widget_show (menuitem);
- browser->throbber = katze_throbber_new ();
- gtk_widget_show (browser->throbber);
- gtk_container_add (GTK_CONTAINER (menuitem), browser->throbber);
- gtk_widget_set_sensitive (menuitem, FALSE);
+ browser->throbber = gtk_spinner_new ();
+ /* Wrap the spinner in an event box to retain its size when hidden */
+ GtkWidget* throbber_box = gtk_event_box_new ();
+ gtk_event_box_set_visible_window (GTK_EVENT_BOX (throbber_box), FALSE);
+ gint icon_size = 16;
+ gtk_icon_size_lookup_for_settings (gtk_widget_get_settings (GTK_WIDGET (browser)),
+ GTK_ICON_SIZE_MENU, &icon_size, NULL);
+ gtk_widget_set_size_request (throbber_box, icon_size, icon_size);
+ gtk_container_add (GTK_CONTAINER (throbber_box), browser->throbber);
+ gtk_widget_show (throbber_box);
+ gtk_container_add (GTK_CONTAINER (menuitem), throbber_box);
#if GTK_CHECK_VERSION (3, 2, 0)
/* FIXME: Doesn't work */
gtk_widget_set_hexpand (menuitem, TRUE);
@@ -6369,78 +6032,24 @@ midori_browser_init (MidoriBrowser* browser)
vpaned = gtk_vpaned_new ();
gtk_paned_pack2 (GTK_PANED (hpaned), vpaned, TRUE, FALSE);
gtk_widget_show (vpaned);
- #ifdef HAVE_GRANITE
- /* FIXME: granite: should return GtkWidget* like GTK+ */
- browser->notebook = (GtkWidget*)granite_widgets_dynamic_notebook_new ();
- granite_widgets_dynamic_notebook_set_allow_new_window (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook), TRUE);
- granite_widgets_dynamic_notebook_set_allow_duplication (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook), TRUE);
- /* FIXME: work-around a bug */
- gtk_widget_show_all (browser->notebook);
- granite_widgets_dynamic_notebook_set_group_name (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook), PACKAGE_NAME);
- #else
- browser->notebook = gtk_notebook_new ();
- gtk_notebook_set_scrollable (GTK_NOTEBOOK (browser->notebook), TRUE);
- #if GTK_CHECK_VERSION (3, 0, 0)
- gtk_notebook_set_group_name (GTK_NOTEBOOK (browser->notebook), PACKAGE_NAME);
- #else
- gtk_notebook_set_group_id (GTK_NOTEBOOK (browser->notebook), GPOINTER_TO_INT (PACKAGE_NAME));
- #endif
- #endif
+ browser->notebook = midori_notebook_new ();
- #if !GTK_CHECK_VERSION (3, 0, 0)
- {
- /* Remove the inner border between scrollbars and the window border */
- GtkRcStyle* rcstyle = gtk_rc_style_new ();
- rcstyle->xthickness = 0;
- gtk_widget_modify_style (browser->notebook, rcstyle);
- g_object_unref (rcstyle);
- }
- #endif
gtk_paned_pack1 (GTK_PANED (vpaned), browser->notebook, FALSE, FALSE);
- #ifdef HAVE_GRANITE
- /* FIXME menu items */
- g_signal_connect (browser->notebook, "tab-added",
- G_CALLBACK (midori_browser_notebook_tab_added_cb),
- browser);
- g_signal_connect (browser->notebook, "tab-removed",
- G_CALLBACK (midori_browser_notebook_tab_removed_cb),
- browser);
g_signal_connect (browser->notebook, "tab-switched",
- G_CALLBACK (midori_browser_notebook_tab_switched_cb),
+ G_CALLBACK (midori_browser_switched_tab_cb),
browser);
g_signal_connect (browser->notebook, "tab-moved",
- G_CALLBACK (midori_browser_notebook_tab_moved_cb),
- browser);
- g_signal_connect (browser->notebook, "tab-duplicated",
- G_CALLBACK (midori_browser_notebook_tab_duplicated_cb),
- browser);
- #else
- g_signal_connect (browser->notebook, "switch-page",
- G_CALLBACK (midori_browser_notebook_switch_page_cb),
- browser);
- g_signal_connect (browser->notebook, "page-reordered",
- G_CALLBACK (midori_browser_notebook_page_reordered_cb),
+ G_CALLBACK (midori_browser_tab_moved_cb),
browser);
- g_signal_connect (browser->notebook, "page-added",
- G_CALLBACK (midori_browser_notebook_page_added_cb),
+ g_signal_connect (browser->notebook, "context-menu",
+ G_CALLBACK (midori_browser_notebook_context_menu_cb),
browser);
- g_signal_connect (browser->notebook, "page-removed",
- G_CALLBACK (midori_browser_notebook_page_removed_cb),
- browser);
- g_signal_connect (browser->notebook, "size-allocate",
- G_CALLBACK (midori_browser_notebook_size_allocate_cb),
- browser);
- g_signal_connect_after (browser->notebook, "button-press-event",
- G_CALLBACK (midori_browser_notebook_button_press_event_after_cb),
- browser);
- g_signal_connect (browser->notebook, "reorder-tab",
- G_CALLBACK (midori_browser_notebook_reorder_tab_cb), NULL);
- g_signal_connect (browser->notebook, "create-window",
+ g_signal_connect (browser->notebook, "tab-context-menu",
+ G_CALLBACK (midori_browser_notebook_tab_context_menu_cb), browser);
+ g_signal_connect (browser->notebook, "tab-detached",
G_CALLBACK (midori_browser_notebook_create_window_cb), browser);
- #endif
+ g_signal_connect (browser->notebook, "new-tab",
+ G_CALLBACK (midori_browser_notebook_new_tab_cb), browser);
gtk_widget_show (browser->notebook);
/* Inspector container */
@@ -6498,6 +6107,7 @@ midori_browser_finalize (GObject* object)
katze_object_assign (browser->trash, NULL);
katze_object_assign (browser->search_engines, NULL);
katze_object_assign (browser->history, NULL);
+ katze_object_assign (browser->history_database, NULL);
katze_object_assign (browser->dial, NULL);
g_idle_remove_by_data (browser);
@@ -6542,6 +6152,7 @@ _midori_browser_set_toolbar_style (MidoriBrowser* browser,
gtk_toolbar_style);
}
+#ifndef HAVE_WEBKIT2
static void
midori_browser_toolbar_popup_context_menu_history_cb (GtkMenuItem* menu_item,
MidoriBrowser* browser)
@@ -6550,6 +6161,7 @@ midori_browser_toolbar_popup_context_menu_history_cb (GtkMenuItem* menu_item,
MidoriView* view = MIDORI_VIEW (midori_browser_get_current_tab (browser));
midori_view_go_back_or_forward (view, steps);
}
+#endif
static void
midori_browser_toolbar_popup_context_menu_history (MidoriBrowser* browser,
@@ -6745,11 +6357,9 @@ _midori_browser_set_toolbar_items (MidoriBrowser* browser,
}
else if (token_current != token_dontcare && token_last == token_dontcare)
continue;
- #ifdef HAVE_GRANITE
/* A "new tab" button is already part of the notebook */
else if (!strcmp (gtk_action_get_name (action), "TabNew"))
continue;
- #endif
else
toolitem = gtk_action_create_tool_item (action);
@@ -6816,7 +6426,7 @@ _midori_browser_update_settings (MidoriBrowser* browser)
gboolean show_panel;
MidoriToolbarStyle toolbar_style;
gchar* toolbar_items;
- gboolean close_buttons_on_tabs;
+ gboolean close_buttons_left, close_buttons_on_tabs;
g_object_get (browser->settings,
"remember-last-window-size", &remember_last_window_size,
@@ -6836,19 +6446,19 @@ _midori_browser_update_settings (MidoriBrowser* browser)
"show-statusbar", &browser->show_statusbar,
"toolbar-style", &toolbar_style,
"toolbar-items", &toolbar_items,
+ "close-buttons-left", &close_buttons_left,
"close-buttons-on-tabs", &close_buttons_on_tabs,
"maximum-history-age", &browser->maximum_history_age,
NULL);
- #ifdef HAVE_GRANITE
- granite_widgets_dynamic_notebook_set_tabs_closable (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook), close_buttons_on_tabs);
- #endif
+ midori_notebook_set_close_buttons_visible (
+ MIDORI_NOTEBOOK (browser->notebook), close_buttons_on_tabs);
+ midori_notebook_set_close_buttons_left (
+ MIDORI_NOTEBOOK (browser->notebook), close_buttons_left);
midori_findbar_set_close_button_left (MIDORI_FINDBAR (browser->find),
- katze_object_get_boolean (browser->settings, "close-buttons-left"));
+ close_buttons_left);
if (browser->dial != NULL)
- midori_speed_dial_set_close_buttons_left (browser->dial,
- katze_object_get_boolean (browser->settings, "close-buttons-left"));
+ midori_speed_dial_set_close_buttons_left (browser->dial, close_buttons_left);
midori_browser_set_inactivity_reset (browser, inactivity_reset);
@@ -6969,17 +6579,17 @@ midori_browser_settings_notify (MidoriWebSettings* web_settings,
}
else if (name == g_intern_string ("maximum-history-age"))
browser->maximum_history_age = g_value_get_int (&value);
- #ifdef HAVE_GRANITE
else if (name == g_intern_string ("close-buttons-on-tabs"))
- granite_widgets_dynamic_notebook_set_tabs_closable (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook), g_value_get_boolean (&value));
- #endif
+ midori_notebook_set_close_buttons_visible (
+ MIDORI_NOTEBOOK (browser->notebook), g_value_get_boolean (&value));
else if (name == g_intern_string ("close-buttons-left"))
{
midori_findbar_set_close_button_left (MIDORI_FINDBAR (browser->find),
g_value_get_boolean (&value));
midori_speed_dial_set_close_buttons_left (browser->dial,
- katze_object_get_boolean (browser->settings, "close-buttons-left"));
+ g_value_get_boolean (&value));
+ midori_notebook_set_close_buttons_left (
+ MIDORI_NOTEBOOK (browser->notebook), g_value_get_boolean (&value));
}
else if (name == g_intern_string ("inactivity-reset"))
midori_browser_set_inactivity_reset (browser, g_value_get_uint (&value));
@@ -7233,7 +6843,7 @@ midori_browser_set_property (GObject* object,
_action_set_visible (browser, "UndoTabClose", browser->trash != NULL);
if (browser->trash != NULL)
{
- g_signal_connect (browser->trash, "clear",
+ g_signal_connect_after (browser->trash, "clear",
G_CALLBACK (midori_browser_trash_clear_cb), browser);
midori_browser_trash_clear_cb (browser->trash, browser);
}
@@ -7302,7 +6912,7 @@ midori_browser_get_property (GObject* object,
g_value_set_object (value, browser->navigationbar);
break;
case PROP_NOTEBOOK:
- g_value_set_object (value, browser->notebook);
+ g_value_set_object (value, MIDORI_NOTEBOOK (browser->notebook)->notebook);
break;
case PROP_PANEL:
g_value_set_object (value, browser->panel);
@@ -7423,13 +7033,7 @@ midori_browser_page_num (MidoriBrowser* browser,
g_return_val_if_fail (MIDORI_IS_BROWSER (browser), -1);
g_return_val_if_fail (MIDORI_IS_VIEW (view), -1);
-#ifdef HAVE_GRANITE
- return granite_widgets_dynamic_notebook_get_tab_position (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook),
- midori_view_get_tab (MIDORI_VIEW (view)));
-#else
- return gtk_notebook_page_num (GTK_NOTEBOOK (browser->notebook), view);
-#endif
+ return midori_notebook_get_tab_index (MIDORI_NOTEBOOK (browser->notebook), MIDORI_TAB (view));
}
@@ -7448,7 +7052,6 @@ midori_browser_close_tab (MidoriBrowser* browser,
g_return_if_fail (MIDORI_IS_BROWSER (browser));
g_return_if_fail (GTK_IS_WIDGET (view));
- midori_browser_add_tab_to_trash (browser, MIDORI_VIEW (view));
g_signal_emit (browser, signals[REMOVE_TAB], 0, view);
}
@@ -7674,22 +7277,7 @@ midori_browser_set_current_page (MidoriBrowser* browser,
view = midori_browser_get_nth_tab (browser, n);
g_return_if_fail (view != NULL);
- #ifdef HAVE_GRANITE
- granite_widgets_dynamic_notebook_set_current (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook),
- midori_view_get_tab (MIDORI_VIEW (view)));
- #else
- gtk_notebook_set_current_page (GTK_NOTEBOOK (browser->notebook), n);
- #endif
- if (midori_view_is_blank (MIDORI_VIEW (view)))
- midori_browser_activate_action (browser, "Location");
- else
- gtk_widget_grab_focus (view);
-
- g_object_freeze_notify (G_OBJECT (browser));
- g_object_notify (G_OBJECT (browser), "uri");
- g_object_notify (G_OBJECT (browser), "tab");
- g_object_thaw_notify (G_OBJECT (browser));
+ midori_browser_set_tab (browser, view);
}
/**
@@ -7707,14 +7295,7 @@ midori_browser_get_current_page (MidoriBrowser* browser)
{
g_return_val_if_fail (MIDORI_IS_BROWSER (browser), -1);
- #ifdef HAVE_GRANITE
- GraniteWidgetsTab* tab = granite_widgets_dynamic_notebook_get_current (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook));
- return tab ? granite_widgets_dynamic_notebook_get_tab_position (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook), tab) : -1;
- #else
- return gtk_notebook_get_current_page (GTK_NOTEBOOK (browser->notebook));
- #endif
+ return midori_notebook_get_index (MIDORI_NOTEBOOK (browser->notebook));
}
/**
@@ -7760,19 +7341,9 @@ GtkWidget*
midori_browser_get_nth_tab (MidoriBrowser* browser,
gint page)
{
-#ifdef HAVE_GRANITE
- GraniteWidgetsTab* tab;
-
g_return_val_if_fail (MIDORI_IS_BROWSER (browser), NULL);
- tab = granite_widgets_dynamic_notebook_get_tab_by_index (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook), page);
- return tab != NULL ? granite_widgets_tab_get_page (tab) : NULL;
-#else
- g_return_val_if_fail (MIDORI_IS_BROWSER (browser), NULL);
-
- return gtk_notebook_get_nth_page (GTK_NOTEBOOK (browser->notebook), page);
-#endif
+ return (GtkWidget*)midori_notebook_get_nth_tab (MIDORI_NOTEBOOK (browser->notebook), page);
}
/**
@@ -7790,13 +7361,19 @@ void
midori_browser_set_current_tab (MidoriBrowser* browser,
GtkWidget* view)
{
- gint n;
-
g_return_if_fail (MIDORI_IS_BROWSER (browser));
g_return_if_fail (GTK_IS_WIDGET (view));
- n = midori_browser_page_num (browser, view);
- midori_browser_set_current_page (browser, n);
+ midori_notebook_set_tab (MIDORI_NOTEBOOK (browser->notebook), MIDORI_TAB (view));
+ if (midori_tab_is_blank (MIDORI_TAB (view)))
+ midori_browser_activate_action (browser, "Location");
+ else
+ gtk_widget_grab_focus (view);
+
+ g_object_freeze_notify (G_OBJECT (browser));
+ g_object_notify (G_OBJECT (browser), "uri");
+ g_object_notify (G_OBJECT (browser), "tab");
+ g_object_thaw_notify (G_OBJECT (browser));
}
/**
@@ -7816,22 +7393,9 @@ midori_browser_set_current_tab (MidoriBrowser* browser,
GtkWidget*
midori_browser_get_current_tab (MidoriBrowser* browser)
{
- #if 0 // def HAVE_GRANITE
- GraniteWidgetsTab* tab;
- #else
- gint n;
- #endif
-
g_return_val_if_fail (MIDORI_IS_BROWSER (browser), NULL);
- #if 0 // FIXME: not reliable def HAVE_GRANITE
- tab = granite_widgets_dynamic_notebook_get_current (
- GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook));
- return tab ? granite_widgets_tab_get_page (tab) : NULL;
- #else
- n = midori_browser_get_current_page (browser);
- return (n >= 0) ? midori_browser_get_nth_tab (browser, n) : NULL;
- #endif
+ return (GtkWidget*)midori_notebook_get_tab (MIDORI_NOTEBOOK (browser->notebook));
}
/**
@@ -7849,12 +7413,7 @@ midori_browser_get_tabs (MidoriBrowser* browser)
{
g_return_val_if_fail (MIDORI_IS_BROWSER (browser), NULL);
- #ifdef HAVE_GRANITE
- /* FIXME: granite doesn't correctly implemented gtk.container */
- return granite_widgets_dynamic_notebook_get_children (GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook));
- #else
return gtk_container_get_children (GTK_CONTAINER (browser->notebook));
- #endif
}
/**
diff --git a/midori/midori-database.vala b/midori/midori-database.vala
index df4608ba..e19fede4 100644
--- a/midori/midori-database.vala
+++ b/midori/midori-database.vala
@@ -10,13 +10,122 @@
*/
namespace Midori {
+ /*
+ * Since: 0.5.6
+ */
public errordomain DatabaseError {
OPEN,
NAMING,
FILENAME,
EXECUTE,
+ COMPILE,
+ TYPE,
}
+ /*
+ * Since: 0.5.7
+ */
+ public class DatabaseStatement : GLib.Object, GLib.Initable {
+ public Sqlite.Statement? stmt { get { return _stmt; } }
+ protected Sqlite.Statement _stmt = null;
+ public Database? database { get; set construct; }
+ public string? query { get; set construct; }
+
+ public DatabaseStatement (Database database, string query) throws DatabaseError {
+ Object (database: database, query: query);
+ init ();
+ }
+
+ public virtual bool init (GLib.Cancellable? cancellable = null) throws DatabaseError {
+ int result = database.db.prepare_v2 (query, -1, out _stmt, null);
+ if (result != Sqlite.OK)
+ throw new DatabaseError.COMPILE ("Failed to compile statement: %s".printf (query));
+ return true;
+ }
+
+ /*
+ * Bind values to named parameters.
+ * SQL: "SELECT foo FROM bar WHERE id = :session_id"
+ * Vala: statement.bind(":session_id", typeof (int64), 12345);
+ * Supported types: string, int64, double
+ */
+ public void bind (string pname, ...) throws DatabaseError {
+ int pindex = stmt.bind_parameter_index (pname);
+ var args = va_list ();
+ Type ptype = args.arg ();
+ if (ptype == typeof (string))
+ stmt.bind_text (pindex, args.arg ());
+ else if (ptype == typeof (int64))
+ stmt.bind_int64 (pindex, args.arg ());
+ else if (ptype == typeof (double))
+ stmt.bind_double (pindex, args.arg ());
+ else
+ throw new DatabaseError.TYPE ("Invalid type '%s' for '%s' in statement: %s".printf (ptype.name (), pname, query));
+ }
+
+ /*
+ * Execute the statement, it's an error if there are more rows.
+ */
+ public bool exec () throws DatabaseError {
+ if (step ())
+ throw new DatabaseError.EXECUTE ("More rows available - use step instead of exec");
+ return true;
+ }
+
+ /*
+ * Proceed to the next row, returns false when the end is nigh.
+ */
+ public bool step () throws DatabaseError {
+ int result = stmt.step ();
+ if (result != Sqlite.DONE && result != Sqlite.ROW)
+ throw new DatabaseError.EXECUTE (database.db.errmsg ());
+ return result == Sqlite.ROW;
+ }
+
+ private int column_index (string name) throws DatabaseError {
+ for (int i = 0; i < stmt.column_count (); i++) {
+ if (name == stmt.column_name (i))
+ return i;
+ }
+ throw new DatabaseError.TYPE ("No such column '%s' in row: %s".printf (name, query));
+ }
+
+ /*
+ * Get a string value by its named parameter, for example ":uri".
+ */
+ public string? get_string (string name) throws DatabaseError {
+ int index = column_index (name);
+ if (stmt.column_type (index) != Sqlite.TEXT)
+ throw new DatabaseError.TYPE ("Getting '%s' with wrong type in row: %s".printf (name, query));
+ return stmt.column_text (index);
+ }
+
+ /*
+ * Get an integer value by its named parameter, for example ":day".
+ */
+ public int64 get_int64 (string name) throws DatabaseError {
+ int index = column_index (name);
+ int type = stmt.column_type (index);
+ if (type != Sqlite.INTEGER && type != Sqlite.NULL)
+ throw new DatabaseError.TYPE ("Getting '%s' with value '%s' of wrong type %d in row: %s".printf (
+ name, stmt.column_text (index), type, query));
+ return stmt.column_int64 (index);
+ }
+
+ /*
+ * Get a double value by its named parameter, for example ":session_id".
+ */
+ public double get_double (string name) throws DatabaseError {
+ int index = column_index (name);
+ if (stmt.column_type (index) != Sqlite.FLOAT)
+ throw new DatabaseError.TYPE ("Getting '%s' with wrong type in row: %s".printf (name, query));
+ return stmt.column_double (index);
+ }
+ }
+
+ /*
+ * Since: 0.5.6
+ */
public class Database : GLib.Object, GLib.Initable {
public Sqlite.Database? db { get { return _db; } }
protected Sqlite.Database? _db = null;
@@ -104,5 +213,32 @@ namespace Midori {
throw new DatabaseError.EXECUTE (db.errmsg ());
return true;
}
+
+ /*
+ * Prepare a statement with optionally binding parameters by name.
+ * See also DatabaseStatement.bind().
+ * Since: 0.5.7
+ */
+ public DatabaseStatement prepare (string query, ...) throws DatabaseError {
+ var statement = new DatabaseStatement (this, query);
+ var args = va_list ();
+ unowned string? pname = args.arg ();
+ while (pname != null) {
+ Type ptype = args.arg ();
+ if (ptype == typeof (string)) {
+ string pvalue = args.arg ();
+ statement.bind (pname, ptype, pvalue);
+ } else if (ptype == typeof (int64)) {
+ int64 pvalue = args.arg ();
+ statement.bind (pname, ptype, pvalue);
+ } else if (ptype == typeof (double)) {
+ double pvalue = args.arg ();
+ statement.bind (pname, ptype, pvalue);
+ } else
+ throw new DatabaseError.TYPE ("Invalid type '%s' in statement: %s".printf (ptype.name (), query));
+ pname = args.arg ();
+ }
+ return statement;
+ }
}
}
diff --git a/midori/midori-dialog.vala b/midori/midori-dialog.vala
index a6862eea..9c8e5104 100644
--- a/midori/midori-dialog.vala
+++ b/midori/midori-dialog.vala
@@ -73,7 +73,7 @@ namespace Midori {
}
public class FileChooserDialog : Gtk.FileChooserDialog {
- public FileChooserDialog (string title, Gtk.Window window, Gtk.FileChooserAction action) {
+ public FileChooserDialog (string title, Gtk.Window? window, Gtk.FileChooserAction action) {
/* Creates a new file chooser dialog to Open or Save and Cancel.
The positive response is %Gtk.ResponseType.OK. */
unowned string stock_id = Gtk.Stock.OPEN;
diff --git a/midori/midori-download.vala b/midori/midori-download.vala
index b49104e4..e2923abb 100644
--- a/midori/midori-download.vala
+++ b/midori/midori-download.vala
@@ -10,8 +10,10 @@
*/
namespace Sokoke {
+#if !HAVE_WEBKIT2
extern static bool show_uri (Gdk.Screen screen, string uri, uint32 timestamp) throws Error;
extern static bool message_dialog (Gtk.MessageType type, string short, string detailed, bool modal);
+#endif
}
namespace Midori {
@@ -52,7 +54,7 @@ namespace Midori {
public static string get_tooltip (WebKit.Download download) {
#if !HAVE_WEBKIT2
- string filename = Path.get_basename (download.destination_uri);
+ string filename = Midori.Download.get_basename_for_display (download.destination_uri);
/* i18n: Download tooltip (size): 4KB of 43MB */
string size = _("%s of %s").printf (
format_size (download.current_size),
@@ -254,6 +256,10 @@ namespace Midori {
#endif
}
+ /**
+ * Returns a filename of the form "name.ext" to use as a suggested name for
+ * a download of the given uri
+ */
public string get_filename_suggestion_for_uri (string mime_type, string uri) {
return_val_if_fail (Midori.URI.is_location (uri), uri);
string filename = File.new_for_uri (uri).get_basename ();
@@ -263,8 +269,7 @@ namespace Midori {
}
public static string? get_extension_for_uri (string uri, out string basename = null) {
- if (&basename != null)
- basename = null;
+ basename = null;
/* Find the last slash and the last period *after* the last slash. */
int last_slash = uri.last_index_of_char ('/');
/* Huh, URI without slashes? */
@@ -277,8 +282,7 @@ namespace Midori {
int query = uri.last_index_of_char ('?', period);
/* The extension, or "." if it ended with a period */
string extension = uri.substring (period, query - period);
- if (&basename != null)
- basename = uri.substring (0, period);
+ basename = uri.substring (0, period);
return extension;
}
@@ -297,9 +301,28 @@ namespace Midori {
return filename;
}
+ /**
+ * Returns a string showing a file:// URI's intended filename on
+ * disk, suited for displaying to a user.
+ *
+ * The string returned is the basename (final path segment) of the
+ * filename of the uri. If the uri is invalid, not file://, or has no
+ * basename, the uri itself is returned.
+ *
+ * Since: 0.5.7
+ **/
+ public static string get_basename_for_display (string uri) {
+ try {
+ string filename = Filename.from_uri (uri);
+ if(filename != null && filename != "")
+ return Path.get_basename (filename);
+ } catch (Error error) { }
+ return uri;
+ }
+
public string prepare_destination_uri (WebKit.Download download, string? folder) {
string suggested_filename = get_suggested_filename (download);
- string basename = File.new_for_uri (suggested_filename).get_basename ();
+ string basename = Path.get_basename (suggested_filename);
string download_dir;
if (folder == null) {
download_dir = Paths.get_tmp_dir ();
@@ -316,9 +339,13 @@ namespace Midori {
}
}
- public static bool has_enough_space (WebKit.Download download, string uri) {
+ /**
+ * Returns whether it seems possible to save @download to the path specified by
+ * @destination_uri, considering space on disk and permissions
+ */
+ public static bool has_enough_space (WebKit.Download download, string destination_uri) {
#if !HAVE_WEBKIT2
- var folder = File.new_for_uri (uri).get_parent ();
+ var folder = File.new_for_uri (destination_uri).get_parent ();
bool can_write;
uint64 free_space;
try {
@@ -337,12 +364,12 @@ namespace Midori {
string detailed_message;
if (!can_write) {
message = _("The file \"%s\" can't be saved in this folder.").printf (
- Path.get_basename (uri));
+ Midori.Download.get_basename_for_display (destination_uri));
detailed_message = _("You don't have permission to write in this location.");
}
else if (free_space < download.total_size) {
message = _("There is not enough free space to download \"%s\".").printf (
- Path.get_basename (uri));
+ Midori.Download.get_basename_for_display (destination_uri));
detailed_message = _("The file needs %s but only %s are left.").printf (
format_size (download.total_size), format_size (free_space));
}
diff --git a/midori/midori-extension.c b/midori/midori-extension.c
index 48e899f0..4e9b46b3 100644
--- a/midori/midori-extension.c
+++ b/midori/midori-extension.c
@@ -563,6 +563,7 @@ midori_extension_load_from_folder (MidoriApp* app,
g_assert (midori_extension_activate_gracefully (app, extension_path, "libapps." G_MODULE_SUFFIX, activate));
g_assert (midori_extension_activate_gracefully (app, extension_path, "libdelayed-load." G_MODULE_SUFFIX, activate));
g_assert (midori_extension_activate_gracefully (app, extension_path, "libtabby." G_MODULE_SUFFIX, activate));
+ g_assert (midori_extension_activate_gracefully (app, extension_path, "libflummi." G_MODULE_SUFFIX, activate));
}
else
{
@@ -674,13 +675,13 @@ midori_extension_add_to_list (MidoriApp* app,
if (katze_array_get_item_index (extensions, extension) >= 0)
return;
/* FIXME need proper stock extension mechanism */
- if (!strcmp (filename, "libtransfers." G_MODULE_SUFFIX)
- || !strcmp (filename, "libapps." G_MODULE_SUFFIX)
- || !strcmp (filename, "libdelayed-load." G_MODULE_SUFFIX)
- || !strcmp (filename, "libtabby." G_MODULE_SUFFIX))
- return;
+ if (strcmp (filename, "libtransfers." G_MODULE_SUFFIX)
+ && strcmp (filename, "libapps." G_MODULE_SUFFIX)
+ && strcmp (filename, "libdelayed-load." G_MODULE_SUFFIX)
+ && strcmp (filename, "libtabby." G_MODULE_SUFFIX)
+ && strcmp (filename, "libflummi." G_MODULE_SUFFIX))
+ katze_array_add_item (extensions, extension);
- katze_array_add_item (extensions, extension);
g_object_unref (extensions);
if (midori_paths_is_readonly ())
diff --git a/midori/midori-frontend.c b/midori/midori-frontend.c
index 84882f13..bc24758c 100644
--- a/midori/midori-frontend.c
+++ b/midori/midori-frontend.c
@@ -207,7 +207,6 @@ midori_private_app_new (const gchar* config,
midori_browser_set_action_visible (browser, "Tools", FALSE);
midori_browser_set_action_visible (browser, "ClearPrivateData", FALSE);
- midori_browser_set_action_visible (browser, "Panel", FALSE);
#if GTK_CHECK_VERSION (3, 0, 0)
g_object_set (gtk_widget_get_settings (GTK_WIDGET (browser)),
"gtk-application-prefer-dark-theme", TRUE,
@@ -368,12 +367,12 @@ midori_frontend_diagnostic_dialog (MidoriApp* app,
gchar* crash_log = g_build_filename (midori_paths_get_runtime_dir (), "gdb.bt", NULL);
if (g_access (crash_log, F_OK) == 0)
{
- GtkWidget* button = gtk_button_new_with_mnemonic (_("Show last crash _log"));
- g_signal_connect_data (button, "clicked",
+ GtkWidget* log_button = gtk_button_new_with_mnemonic (_("Show last crash _log"));
+ g_signal_connect_data (log_button, "clicked",
G_CALLBACK (midori_frontend_crash_log_cb), crash_log,
(GClosureNotify)g_free, 0);
- gtk_widget_show (button);
- gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 4);
+ gtk_widget_show (log_button);
+ gtk_box_pack_start (GTK_BOX (box), log_button, FALSE, FALSE, 4);
}
else
g_free (crash_log);
@@ -381,11 +380,11 @@ midori_frontend_diagnostic_dialog (MidoriApp* app,
gchar* gdb = g_find_program_in_path ("gdb");
if (gdb != NULL)
{
- GtkWidget* button = gtk_button_new_with_mnemonic (_("Run in _debugger"));
+ GtkWidget* gdb_button = gtk_button_new_with_mnemonic (_("Run in _debugger"));
g_signal_connect (button, "clicked",
G_CALLBACK (midori_frontend_debugger_cb), dialog);
- gtk_widget_show (button);
- gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 4);
+ gtk_widget_show (gdb_button);
+ gtk_box_pack_start (GTK_BOX (box), gdb_button, FALSE, FALSE, 4);
}
gtk_dialog_set_default_response (GTK_DIALOG (dialog),
load_on_startup == MIDORI_STARTUP_HOMEPAGE
diff --git a/midori/midori-history.c b/midori/midori-history.c
index 11c18f07..bb717747 100644
--- a/midori/midori-history.c
+++ b/midori/midori-history.c
@@ -18,13 +18,16 @@ static void
midori_history_clear_cb (KatzeArray* array,
sqlite3* db)
{
- char* errmsg = NULL;
- if (sqlite3_exec (db, "DELETE FROM history; DELETE FROM search",
- NULL, NULL, &errmsg) != SQLITE_OK)
+ GError* error = NULL;
+ MidoriHistoryDatabase* database = midori_history_database_new (NULL, &error);
+ if (error == NULL)
+ midori_history_database_clear (database, 0, &error);
+ if (error != NULL)
{
- g_printerr (_("Failed to clear history: %s\n"), errmsg);
- sqlite3_free (errmsg);
+ g_printerr (_("Failed to clear history: %s\n"), error->message);
+ g_error_free (error);
}
+ g_object_unref (database);
}
KatzeArray*
@@ -60,19 +63,16 @@ midori_history_on_quit (KatzeArray* array,
MidoriWebSettings* settings)
{
gint max_history_age = katze_object_get_int (settings, "maximum-history-age");
- sqlite3* db = g_object_get_data (G_OBJECT (array), "db");
- char* errmsg = NULL;
- gchar* sqlcmd = g_strdup_printf (
- "DELETE FROM history WHERE "
- "(julianday(date('now')) - julianday(date(date,'unixepoch')))"
- " >= %d", max_history_age);
- if (sqlite3_exec (db, sqlcmd, NULL, NULL, &errmsg) != SQLITE_OK)
+ GError* error = NULL;
+ MidoriHistoryDatabase* database = midori_history_database_new (NULL, &error);
+ if (error == NULL)
+ midori_history_database_clear (database, max_history_age, &error);
+ if (error != NULL)
{
/* i18n: Couldn't remove items that are older than n days */
- g_printerr (_("Failed to remove old history items: %s\n"), errmsg);
- sqlite3_free (errmsg);
+ g_printerr (_("Failed to remove old history items: %s\n"), error->message);
+ g_error_free (error);
}
- g_free (sqlcmd);
- sqlite3_close (db);
+ g_object_unref (database);
}
diff --git a/midori/midori-historydatabase.vala b/midori/midori-historydatabase.vala
index 825f7e49..5f93bee2 100644
--- a/midori/midori-historydatabase.vala
+++ b/midori/midori-historydatabase.vala
@@ -39,8 +39,8 @@ namespace Midori {
public HistoryDatabase (GLib.Object? app) throws DatabaseError {
Object (path: "history.db");
init ();
- string bookmarks_filename = Midori.Paths.get_config_filename_for_writing ("bookmarks_v2.db");
- exec ("ATTACH DATABASE '%s' AS bookmarks".printf (bookmarks_filename));
+ Midori.BookmarksDatabase bookmarks_database = new Midori.BookmarksDatabase ();
+ exec ("ATTACH DATABASE '%s' AS bookmarks".printf (bookmarks_database.path));
try {
exec ("SELECT day FROM history LIMIT 1");
@@ -49,61 +49,52 @@ namespace Midori {
}
}
- public async List<HistoryItem>? query (string sqlcmd, string? filter, int day, int max_items, Cancellable cancellable) {
+ public async List<HistoryItem>? query (string sqlcmd, string? filter, int64 day, int64 max_items, Cancellable cancellable) {
return_val_if_fail (db != null, null);
- Sqlite.Statement stmt;
- int result;
+ Midori.DatabaseStatement statement;
- result = db.prepare_v2 (sqlcmd, -1, out stmt, null);
- if (result != Sqlite.OK) {
- critical (_("Failed to select from history: %s"), db.errmsg ());
- return null;
- }
-
- if (":filter" in sqlcmd) {
+ try {
string real_filter = "%" + filter.replace (" ", "%") + "%";
- stmt.bind_text (stmt.bind_parameter_index (":filter"), real_filter);
- }
- if (":day" in sqlcmd)
- stmt.bind_int64 (stmt.bind_parameter_index (":day"), day);
- if (":limit" in sqlcmd)
- stmt.bind_int64 (stmt.bind_parameter_index (":limit"), max_items);
-
- result = stmt.step ();
- if (!(result == Sqlite.DONE || result == Sqlite.ROW)) {
- critical (_("Failed to select from history: %s"), db.errmsg ());
+ statement = prepare (sqlcmd,
+ ":filter", typeof (string), real_filter,
+ ":day", typeof (int64), day,
+ ":limit", typeof (int64), max_items);
+ } catch (Error error) {
+ critical (_("Failed to select from history: %s"), error.message);
return null;
}
var items = new List<HistoryItem> ();
- while (result == Sqlite.ROW) {
- int64 type = stmt.column_int64 (0);
- int64 date = stmt.column_int64 (1);
- switch (type) {
- case 1:
- string uri = stmt.column_text (2);
- string title = stmt.column_text (3);
- items.append (new HistoryWebsite (uri, title, date));
- break;
- case 2:
- string uri = stmt.column_text (2);
- string title = stmt.column_text (3);
- items.append (new HistorySearch (uri, title, date));
- break;
- default:
- warn_if_reached ();
- break;
+ try {
+ while (statement.step ()) {
+ int64 type = statement.get_int64 ("type");
+ int64 date = statement.get_int64 ("date");
+ switch (type) {
+ case 1:
+ string uri = statement.get_string ("uri");
+ string title = statement.get_string ("title");
+ items.append (new HistoryWebsite (uri, title, date));
+ break;
+ case 2:
+ string uri = statement.get_string ("uri");
+ string title = statement.get_string ("title");
+ items.append (new HistorySearch (uri, title, date));
+ break;
+ default:
+ warn_if_reached ();
+ break;
+ }
+
+ uint src = Idle.add (query.callback);
+ yield;
+ Source.remove (src);
+
+ if (cancellable.is_cancelled ())
+ return null;
}
-
- uint src = Idle.add (query.callback);
- yield;
- Source.remove (src);
-
- if (cancellable.is_cancelled ())
- return null;
-
- result = stmt.step ();
+ } catch (Error error) {
+ critical (_("Failed to select from history: %s"), error.message);
}
if (cancellable.is_cancelled ())
@@ -127,5 +118,29 @@ namespace Midori {
""";
return yield query (sqlcmd, filter, 0, max_items, cancellable);
}
+
+ public bool insert (string uri, string title, int64 date, int64 day) throws DatabaseError {
+ unowned string sqlcmd = "INSERT INTO history (uri, title, date, day) VALUES (:uri, :title, :date, :day)";
+ var statement = prepare (sqlcmd,
+ ":uri", typeof (string), uri,
+ ":title", typeof (string), title,
+ ":date", typeof (int64), date,
+ ":day", typeof (int64), day);
+ return statement.exec ();
+ }
+
+ public bool clear (int64 maximum_age=0) throws DatabaseError {
+ unowned string sqlcmd = """
+ DELETE FROM history WHERE
+ (julianday(date('now')) - julianday(date(date,'unixepoch')))
+ >= :maximum_age;
+ DELETE FROM search WHERE
+ (julianday(date('now')) - julianday(date(date,'unixepoch')))
+ >= :maximum_age;
+ """;
+ var statement = prepare (sqlcmd,
+ ":maximum_age", typeof (int64), maximum_age);
+ return statement.exec ();
+ }
}
}
diff --git a/midori/midori-locationaction.c b/midori/midori-locationaction.c
index 949fbd0f..dc70765c 100644
--- a/midori/midori-locationaction.c
+++ b/midori/midori-locationaction.c
@@ -1322,22 +1322,22 @@ midori_location_action_cert_response_cb (GtkWidget* dialog,
{
/* FIXME: Would be nice if GcrCertificateExporter became public */
gchar* filename = g_strconcat (peer, ".crt", NULL);
- GtkWidget* dialog = (GtkWidget*)midori_file_chooser_dialog_new (_("Export certificate"),
+ GtkWidget* export_dialog = (GtkWidget*)midori_file_chooser_dialog_new (_("Export certificate"),
NULL, GTK_FILE_CHOOSER_ACTION_SAVE);
- gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
- gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), filename);
+ gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (export_dialog), TRUE);
+ gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (export_dialog), filename);
g_free (filename);
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
+ if (gtk_dialog_run (GTK_DIALOG (export_dialog)) == GTK_RESPONSE_OK)
{
gsize n_data;
gconstpointer data = gcr_certificate_get_der_data (gcr_cert, &n_data);
g_return_if_fail (data);
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
+ filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (export_dialog));
g_file_set_contents (filename, data, n_data, NULL);
g_free (filename);
}
- gtk_widget_destroy (dialog);
+ gtk_widget_destroy (export_dialog);
}
if (error != NULL)
{
@@ -1448,11 +1448,13 @@ midori_location_action_icon_released_cb (GtkWidget* widget,
gint button,
GtkAction* action)
{
- /* The dialog should "toggle" like a menu, as far as users go
- FIXME: Half-working: the dialog closes but re-opens */
+ /* The dialog should "toggle" like a menu, as far as users go */
static GtkWidget* dialog = NULL;
if (icon_pos == GTK_ENTRY_ICON_PRIMARY && dialog != NULL)
+ {
gtk_widget_destroy (dialog);
+ return; // Previously code was running on and the widget was being rebuilt
+ }
if (icon_pos == GTK_ENTRY_ICON_PRIMARY)
{
diff --git a/midori/midori-notebook.vala b/midori/midori-notebook.vala
new file mode 100644
index 00000000..eaeded52
--- /dev/null
+++ b/midori/midori-notebook.vala
@@ -0,0 +1,526 @@
+/*
+ Copyright (C) 2013 Christian Dywan <christian@twotoasts.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ See the file COPYING for the full license text.
+*/
+
+namespace Midori {
+ protected class Tally : Gtk.EventBox {
+ public Midori.Tab tab { get; set; }
+ Gtk.Spinner spinner;
+ public Gtk.Label label;
+ Gtk.HBox box;
+ public Gtk.Image icon;
+ Gtk.Alignment align;
+ Gtk.Button close;
+
+ public bool close_button_left { get; set; default = false; }
+ public bool close_button_visible { get; set; default = false; }
+
+ protected Tally (Midori.Tab tab) {
+ this.tab = tab;
+ box = new Gtk.HBox (false, 1);
+ add (box);
+
+ spinner = new Gtk.Spinner ();
+ spinner.active = true;
+ /* Ensure the spinner is the size of the icon */
+ int icon_size = 16;
+ Gtk.icon_size_lookup_for_settings (get_settings (),
+ Gtk.IconSize.MENU, out icon_size, null);
+ spinner.set_size_request (icon_size, icon_size);
+ box.pack_start (spinner, false, false, 0);
+ label = new Gtk.Label (null);
+ label.set_alignment (0.0f, 0.5f);
+ label.set_padding (0, 0);
+ box.pack_start (label, true, true, 0);
+ close = new Gtk.Button ();
+ close.relief = Gtk.ReliefStyle.NONE;
+ close.focus_on_click = false;
+#if !HAVE_GTK3
+ close.name = "midori-close-button";
+ close.style_set.connect (close_style_set);
+#endif
+ icon = new Gtk.Image.from_gicon (new ThemedIcon.with_default_fallbacks ("window-close-symbolic"), Gtk.IconSize.MENU);
+ close.add (icon);
+ align = new Gtk.Alignment (1.0f, 0.5f, 0.0f, 0.0f);
+ align.add (close);
+ box.pack_start (align, false, false, 0);
+ close.clicked.connect (close_clicked);
+ icon = new Gtk.Image.from_gicon (new ThemedIcon.with_default_fallbacks ("text-html-symbolic"), Gtk.IconSize.MENU);
+ box.pack_start (icon, false, false, 0);
+ box.show_all ();
+
+ tab.notify["uri"].connect (uri_changed);
+ tab.notify["title"].connect (title_changed);
+ tab.notify["icon"].connect (icon_changed);
+ tab.notify["minimized"].connect (minimized_changed);
+ tab.notify["progress"].connect (progress_changed);
+ tab.colors_changed.connect (colors_changed);
+ update_label ();
+ label.visible = !tab.minimized;
+ spinner.visible = tab.progress > 0.0;
+ icon.visible = !spinner.visible;
+ update_color ();
+
+ notify["close-button-left"].connect (close_button_left_changed);
+ notify_property ("close-button-left");
+ notify["close-button-visible"].connect (close_button_visible_changed);
+ notify_property ("close-button-visible");
+
+ Gtk.drag_dest_set (this, Gtk.DestDefaults.ALL, (Gtk.TargetEntry[])null, Gdk.DragAction.COPY);
+ Gtk.drag_dest_add_text_targets (this);
+ Gtk.drag_dest_add_uri_targets (this);
+ drag_data_received.connect (uri_dragged);
+ }
+
+#if !HAVE_GTK3
+ void close_style_set (Gtk.Style? previous_style) {
+ Gtk.Requisition size;
+ close.child.size_request (out size);
+ close.set_size_request (size.width, size.height);
+ }
+#endif
+
+ void close_clicked () {
+ tab.destroy ();
+ }
+
+ void uri_changed (GLib.ParamSpec pspec) {
+ label.label = tab.uri;
+ }
+
+ void title_changed (GLib.ParamSpec pspec) {
+ update_label ();
+ }
+
+ void update_label () {
+ string? title;
+ tab.get ("title", out title);
+ label.label = Midori.Tab.get_display_title (title, tab.uri);
+ /* Use computed label below! */
+ label.ellipsize = Midori.Tab.get_display_ellipsize (label.label, tab.uri);
+ tooltip_text = label.label;
+ }
+
+ void icon_changed (GLib.ParamSpec pspec) {
+ Icon? icon;
+ tab.get ("icon", out icon);
+ this.icon.set_from_gicon (icon, Gtk.IconSize.MENU);
+ }
+
+ void colors_changed () {
+ update_color ();
+ }
+
+ void update_color () {
+ visible_window = tab.fg_color != null || tab.bg_color != null;
+ label.modify_fg (Gtk.StateType.NORMAL, tab.fg_color);
+ label.modify_fg (Gtk.StateType.ACTIVE, tab.fg_color);
+ modify_bg (Gtk.StateType.NORMAL, tab.bg_color);
+ modify_bg (Gtk.StateType.ACTIVE, tab.bg_color);
+ }
+
+ void close_button_left_changed (GLib.ParamSpec pspec) {
+ if (close_button_left) {
+ box.reorder_child (align, 0);
+ box.reorder_child (label, 1);
+ box.reorder_child (icon, 2);
+ box.reorder_child (spinner, 3);
+ } else {
+ box.reorder_child (spinner, 0);
+ box.reorder_child (icon, 1);
+ box.reorder_child (label, 2);
+ box.reorder_child (align, 3);
+ }
+ }
+
+ void close_button_visible_changed (GLib.ParamSpec pspec) {
+ align.visible = !tab.minimized && close_button_visible;
+ }
+
+ void minimized_changed (GLib.ParamSpec pspec) {
+ label.visible = !tab.minimized;
+ notify_property ("close-button-visible");
+ }
+
+ void progress_changed (GLib.ParamSpec pspec) {
+ spinner.visible = tab.progress > 0.0;
+ icon.visible = !spinner.visible;
+ }
+
+ void uri_dragged (Gdk.DragContext context, int x, int y, Gtk.SelectionData data, uint ttype, uint timestamp) {
+ /* FIXME: Navigate to the URI
+ string[] uri = data.get_uris ();
+ if (uri != null)
+ tab.uri = uri[0];
+ else
+ tab.uri = data.get_text ();
+ */
+ }
+ }
+
+ public class Notebook : Gtk.EventBox {
+ public Gtk.Notebook notebook;
+ int last_tab_size = 0;
+
+#if !HAVE_GTK3
+ static const string style_fixup = """
+ style "midori-close-button-style"
+ {
+ GtkWidget::focus-padding = 0
+ GtkWidget::focus-line-width = 0
+ xthickness = 0
+ ythickness = 0
+ }
+ widget "*.midori-close-button" style "midori-close-button-style"
+ """;
+#endif
+
+ /* Since: 0.5.7 */
+ public uint count { get; private set; default = 0; }
+ /* Since: 0.5.7 */
+ public int index { get; set; default = -1; }
+ /* Since: 0.5.7 */
+ public Midori.Tab? tab { get; set; default = null; }
+ /* Since: 0.5.7 */
+ private Midori.Tab? previous { get; set; default = null; }
+
+ /* Since: 0.5.7 */
+ public bool close_buttons_left { get; set; default = true; }
+ /* Since: 0.5.7 */
+ public bool close_buttons_visible { get; set; default = true; }
+ /* Since: 0.5.7 */
+ public bool labels_visible { get; set; default = true; }
+
+ /* Since: 0.5.7 */
+ public signal void tab_context_menu (Midori.Tab tab, ContextAction menu);
+ /* Since: 0.5.7 */
+ public signal void context_menu (ContextAction menu);
+ /* The current tab is about to switch, but the old tab still has focus.
+ Since: 0.5.7 */
+ public signal void tab_switched (Midori.Tab? old, Midori.Tab @new);
+ /* A tab is about to move to a new position.
+ Since: 0.5.7 */
+ public signal void tab_moved (Midori.Tab tab, uint new_index);
+ /* A tab is being dragging out of the window.
+ Since: 0.5.7 */
+ public signal void tab_detached (Midori.Tab tab, int x, int y);
+ /* Since: 0.5.7 */
+ public signal void new_tab ();
+
+ [CCode (type = "GtkWidget*")]
+ public Notebook () {
+ visible_window = false;
+ notebook = new Gtk.Notebook ();
+ notebook.visible = notebook.scrollable = true;
+ notebook.show_border = false;
+ notebook.set ("group-name", PACKAGE_NAME);
+ add (notebook);
+
+#if !HAVE_GTK3
+ /* Remove the inner border between scrollbars and window border */
+ Gtk.RcStyle rcstyle = new Gtk.RcStyle ();
+ rcstyle.xthickness = 0;
+ notebook.modify_style (rcstyle);
+ Gtk.rc_parse_string (style_fixup);
+#endif
+ notify["index"].connect (index_changed);
+ notify["tab"].connect (tab_changed);
+ notify["labels-visible"].connect (labels_visible_changed);
+ notify["close-buttons-visible"].connect (close_buttons_visible_changed);
+ notify["close-buttons-left"].connect (close_buttons_left_changed);
+
+ notebook.size_allocate.connect (size_allocated);
+ notebook.switch_page.connect (page_switched);
+ notebook.page_reordered.connect (page_moved);
+ notebook.create_window.connect (window_created);
+
+ var add = new Gtk.Button ();
+ add.relief = Gtk.ReliefStyle.NONE;
+ add.add (new Gtk.Image.from_gicon (new ThemedIcon.with_default_fallbacks ("tab-new-symbolic"), Gtk.IconSize.MENU));
+ add.show_all ();
+ notebook.set_action_widget (add, Gtk.PackType.START);
+ add.clicked.connect (()=>{
+ new_tab ();
+ });
+
+ button_press_event.connect (button_pressed);
+ }
+
+ ~Notebook () {
+ notebook.size_allocate.disconnect (size_allocated);
+ notebook.switch_page.disconnect (page_switched);
+ notebook.page_reordered.disconnect (page_moved);
+ notebook.create_window.disconnect (window_created);
+ }
+
+ bool button_pressed (Gdk.EventButton event) {
+ /* Propagate events in logical label area */
+ foreach (var child in notebook.get_children ()) {
+ var tally = notebook.get_tab_label (tab) as Tally;
+ Gtk.Allocation size;
+ tally.get_allocation (out size);
+ if (tally.get_mapped ()
+ && event.x_root >= size.x
+ && event.x_root <= (size.x + size.width)) {
+ tally.button_press_event (event);
+ return true;
+ }
+ }
+
+ if (event.type == Gdk.EventType.2BUTTON_PRESS && event.button == 1
+ || event.button == 2) {
+ new_tab ();
+ return true;
+ }
+ else if (event.button == 3) {
+ var menu = new Midori.ContextAction ("NotebookContextMenu", null, null, null);
+ uint counter = 0;
+ foreach (var child in notebook.get_children ()) {
+ var tab = child as Midori.Tab;
+ var tally = notebook.get_tab_label (tab) as Tally;
+ var action = new Gtk.Action ("Tab%u".printf (counter), tally.label.label, null, null);
+ action.gicon = tally.icon.gicon;
+ action.activate.connect (()=>{
+ notebook.set_current_page (notebook.page_num (tab));
+ });
+ menu.add (action);
+ counter++;
+ }
+ context_menu (menu);
+ var popup = menu.create_menu (null, false);
+ popup.show ();
+ popup.attach_to_widget (this, null);
+ popup.popup (null, null, null, event.button, event.time);
+ return true;
+ }
+ return false;
+ }
+
+ public void insert (Midori.Tab tab, int index) {
+ var tally = new Tally (tab);
+ tally.close_button_left = close_buttons_left;
+ tally.close_button_visible = close_buttons_visible;
+ tally.button_press_event.connect (tab_button_pressed);
+ tally.show ();
+ tally.set_size_request (tab.minimized ? -1 : last_tab_size, -1);
+
+ /* Minimum requirements for any tab */
+ tab.can_focus = tab.visible = true;
+ notebook.insert_page (tab, tally, index);
+ notebook.set_tab_reorderable (tab, true);
+ notebook.set_tab_detachable (tab, true);
+ tab.destroy.connect (tab_removed);
+ tab.notify["minimized"].connect (tab_minimized);
+ count++;
+ tab.ref ();
+ relayout ();
+ }
+
+ void tab_removed () {
+ count--;
+ if (count > 0)
+ relayout ();
+ }
+
+ void relayout () {
+ Gtk.Allocation size;
+ notebook.get_allocation (out size);
+ resize (size.width);
+ }
+
+ bool tab_button_pressed (Gtk.Widget label, Gdk.EventButton event) {
+ Tally tally = label as Tally;
+ if (event.button == 1) {
+ /* Leave switching and dragging up to the notebook */
+ return false;
+ } else if (event.button == 2)
+ tally.tab.destroy ();
+ else if (event.button == 3) {
+ var menu = new Midori.ContextAction ("TabContextMenu", null, null, null);
+ tab_context_menu (tally.tab, menu);
+ var action_window = new Midori.ContextAction ("TabWindowNew", _("Open in New _Window"), null, "window-new");
+ action_window.activate.connect (()=>{
+ tab_detached (tally.tab, 128, 128);
+ });
+ menu.add (action_window);
+ var action_minimize = new Midori.ContextAction ("TabMinimize", tally.tab.minimized ? _("Show Tab _Label") : _("Show Tab _Icon Only"), null, null);
+ action_minimize.activate.connect (()=>{
+ tally.tab.minimized = !tally.tab.minimized;
+ });
+ menu.add (action_minimize);
+ var action_right = new Midori.ContextAction ("TabCloseRight", ngettext ("Close Tab to the R_ight", "Close Tabs to the R_ight", count - 1), null, null);
+ action_right.sensitive = count > 1;
+ action_right.activate.connect (()=>{
+ bool found_tab = false;
+ foreach (var child in notebook.get_children ()) {
+ if (found_tab)
+ child.destroy ();
+ else
+ found_tab = child == tally.tab;
+ }
+ });
+ menu.add (action_right);
+ var action_other = new Midori.ContextAction ("TabCloseOther", ngettext ("Close Ot_her Tab", "Close Ot_her Tabs", count - 1), null, null);
+ action_other.sensitive = count > 1;
+ action_other.activate.connect (()=>{
+ foreach (var child in notebook.get_children ())
+ if (child != tally.tab)
+ child.destroy ();
+ });
+ menu.add (action_other);
+ var action_close = new Midori.ContextAction ("TabClose", null, null, Gtk.STOCK_CLOSE);
+ action_close.activate.connect (()=>{
+ tally.tab.destroy ();
+ });
+ menu.add (action_close);
+ var popup = menu.create_menu (null, false);
+ popup.show ();
+ popup.attach_to_widget (this, null);
+ popup.popup (null, null, null, event.button, event.time);
+ }
+ return true;
+ }
+
+ public void move (Midori.Tab tab, int index) {
+ notebook.reorder_child (tab, index);
+ }
+
+ /* Chain up drawing manually to circumvent parent checks */
+#if HAVE_GTK3
+ public override bool draw (Cairo.Context cr) {
+ notebook.draw (cr);
+ return true;
+ }
+#else
+ public override bool expose_event (Gdk.EventExpose event) {
+ notebook.expose_event (event);
+ return true;
+ }
+#endif
+
+ public override void forall_internal (bool include_internal, Gtk.Callback callback) {
+ if (include_internal)
+ callback (notebook);
+ foreach (var child in notebook.get_children ())
+ callback (child);
+ }
+
+ /* Can't override Gtk.Container.remove because it checks the parent */
+ public new void remove (Midori.Tab tab) {
+ return_if_fail (notebook.get_children ().find (tab) != null);
+
+ notebook.remove (tab);
+ tab.destroy.disconnect (tab_removed);
+ tab.notify["minimized"].disconnect (tab_minimized);
+ tab_removed ();
+ tab.unref ();
+ }
+
+ void tab_minimized (GLib.ParamSpec pspec) {
+ var tally = notebook.get_tab_label (tab) as Tally;
+ tally.set_size_request (tab.minimized ? -1 : last_tab_size, -1);
+ }
+
+ public Midori.Tab get_nth_tab (int index) {
+ return notebook.get_nth_page (index) as Midori.Tab;
+ }
+
+ public int get_tab_index (Midori.Tab tab) {
+ return notebook.page_num (tab);
+ }
+
+ void index_changed (GLib.ParamSpec pspec) {
+ notebook.set_current_page (index);
+ }
+
+ void tab_changed (GLib.ParamSpec pspec) {
+ notebook.set_current_page (notebook.page_num (tab));
+ }
+
+ void labels_visible_changed (GLib.ParamSpec pspec) {
+ notebook.show_tabs = labels_visible;
+ }
+
+ void close_buttons_visible_changed (GLib.ParamSpec pspec) {
+ foreach (var child in notebook.get_children ()) {
+ var tally = notebook.get_tab_label (child) as Tally;
+ tally.close_button_visible = close_buttons_visible;
+ }
+ }
+
+ void close_buttons_left_changed (GLib.ParamSpec pspec) {
+ foreach (var child in notebook.get_children ()) {
+ var tally = notebook.get_tab_label (child) as Tally;
+ tally.close_button_left = close_buttons_left;
+ }
+ }
+
+#if HAVE_GTK3
+ void size_allocated (Gtk.Allocation allocation) {
+#else
+ void size_allocated (Gdk.Rectangle allocation) {
+#endif
+ if (labels_visible && count > 0)
+ resize (allocation.width);
+ }
+
+#if HAVE_GTK3
+ void page_switched (Gtk.Widget new_tab, uint new_index) {
+#else
+ void page_switched (Gtk.NotebookPage new_tab, uint new_index) {
+#endif
+ tab_switched (previous, new_tab as Tab);
+ previous = (Midori.Tab)new_tab;
+
+ notify["index"].disconnect (index_changed);
+ notify["tab"].disconnect (tab_changed);
+ index = (int)new_index;
+ tab = (Midori.Tab)new_tab;
+ notify["index"].connect (index_changed);
+ notify["tab"].connect (tab_changed);
+ }
+
+ void page_moved (Gtk.Widget moving_tab, uint new_index) {
+ tab_moved (moving_tab as Midori.Tab, new_index);
+ /* Indices change, current tab is not in the same position */
+ notify["index"].disconnect (index_changed);
+ index = (int)get_tab_index (tab);
+ notify["index"].connect (index_changed);
+ }
+
+ unowned Gtk.Notebook window_created (Gtk.Widget tab, int x, int y) {
+ tab_detached (tab as Tab, x, y);
+ /* The API allows now, the cast is due to bindings not having ? */
+ return (Gtk.Notebook)null;
+ }
+
+ void resize (int new_size) {
+ int n = int.max (1, (int)count);
+ new_size /= n;
+ int icon_size = 16;
+ Gtk.icon_size_lookup_for_settings (get_settings (),
+ Gtk.IconSize.MENU, out icon_size, null);
+ int max_size = 150;
+ int min_size = icon_size;
+ if (close_buttons_visible)
+ min_size += icon_size;
+ new_size = new_size.clamp (min_size, max_size);
+ if ((new_size - last_tab_size).abs () < 3)
+ return;
+
+ last_tab_size = new_size;
+ foreach (var child in notebook.get_children ()) {
+ var tab = child as Midori.Tab;
+ var tally = notebook.get_tab_label (child) as Tally;
+ tally.set_size_request (tab.minimized ? -1 : last_tab_size, -1);
+ }
+ }
+ }
+}
diff --git a/midori/midori-panel.c b/midori/midori-panel.c
index 7a0cdf28..10e3b20a 100644
--- a/midori/midori-panel.c
+++ b/midori/midori-panel.c
@@ -536,6 +536,10 @@ static void
midori_panel_action_activate_cb (GtkRadioAction* action,
MidoriPanel* panel)
{
+ MidoriBrowser* browser = midori_browser_get_for_widget (GTK_WIDGET (panel));
+ GtkActionGroup* actions = midori_browser_get_action_group (browser);
+ GtkAction* panel_action = gtk_action_group_get_action (actions, "Panel");
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (panel_action), TRUE);
GtkWidget* viewable = g_object_get_data (G_OBJECT (action), "viewable");
gint n = midori_panel_page_num (panel, viewable);
diff --git a/midori/midori-preferences.c b/midori/midori-preferences.c
index 70cca722..0f131ab6 100644
--- a/midori/midori-preferences.c
+++ b/midori/midori-preferences.c
@@ -399,7 +399,7 @@ midori_preferences_set_settings (MidoriPreferences* preferences,
gchar* supports_web_gl = sokoke_js_script_eval (js_context,
"!!window.WebGLRenderingContext", NULL);
if (g_strcmp0 (supports_web_gl, "true"))
- gtk_widget_set_sensitive (button, FALSE);
+ gtk_widget_hide (button);
g_free (supports_web_gl);
}
#endif
@@ -482,11 +482,6 @@ midori_preferences_set_settings (MidoriPreferences* preferences,
button = katze_property_proxy (settings, "close-buttons-on-tabs", NULL);
gtk_button_set_label (GTK_BUTTON (button), _("Close Buttons on Tabs"));
INDENTED_ADD (button);
- #ifndef HAVE_GRANITE
- button = katze_property_proxy (settings, "always-show-tabbar", NULL);
- gtk_button_set_label (GTK_BUTTON (button), _("Always Show Tabbar"));
- SPANNED_ADD (button);
- #endif
button = katze_property_proxy (settings, "open-tabs-next-to-current", NULL);
gtk_button_set_label (GTK_BUTTON (button), _("Open Tabs next to Current"));
gtk_widget_set_tooltip_text (button, _("Whether to open new tabs next to the current tab or after the last one"));
@@ -515,7 +510,7 @@ midori_preferences_set_settings (MidoriPreferences* preferences,
INDENTED_ADD (label);
button = katze_property_proxy (settings, "proxy-type", NULL);
SPANNED_ADD (button);
- label = gtk_label_new (_("Hostname"));
+ label = gtk_label_new (_("URI"));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
INDENTED_ADD (label);
entry = katze_property_proxy (settings, "http-proxy", "address");
@@ -557,6 +552,7 @@ midori_preferences_set_settings (MidoriPreferences* preferences,
gtk_widget_set_tooltip_text (label, _("The maximum size of cached pages on disk"));
INDENTED_ADD (label);
button = katze_property_proxy (settings, "maximum-cache-size", NULL);
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON (button), 0, G_MAXINT);
gtk_widget_set_tooltip_text (button, _("The maximum size of cached pages on disk"));
SPANNED_ADD (button);
label = gtk_label_new (_("MB"));
@@ -633,7 +629,6 @@ midori_preferences_add_extension_category (KatzePreferences* preferences,
MidoriApp* app)
{
KatzeArray* array;
- gchar* extension_path;
GtkWidget* scrolled;
GtkWidget* addon;
GList* children;
diff --git a/midori/midori-privatedata.c b/midori/midori-privatedata.c
index c95e7a0d..b87fb4d5 100644
--- a/midori/midori-privatedata.c
+++ b/midori/midori-privatedata.c
@@ -234,7 +234,6 @@ midori_clear_web_cookies_cb (void)
MidoriWebSettings* settings = g_object_get_data (G_OBJECT (session), "midori-settings");
SoupSessionFeature* jar = soup_session_get_feature (session, SOUP_TYPE_COOKIE_JAR);
GSList* cookies = soup_cookie_jar_all_cookies (SOUP_COOKIE_JAR (jar));
- SoupSessionFeature* feature;
/* HTTP Cookies/ Web Cookies */
for (; cookies != NULL; cookies = g_slist_next (cookies))
diff --git a/midori/midori-searchaction.c b/midori/midori-searchaction.c
index fccbe4a0..01a06096 100644
--- a/midori/midori-searchaction.c
+++ b/midori/midori-searchaction.c
@@ -422,8 +422,6 @@ midori_search_action_icon_released_cb (GtkWidget* entry,
{
KATZE_ARRAY_FOREACH_ITEM (item, search_engines)
{
- const gchar* icon_name;
-
menuitem = gtk_image_menu_item_new_with_label (
katze_item_get_name (item));
image = gtk_image_new ();
@@ -1044,7 +1042,7 @@ midori_search_action_get_editor (MidoriSearchAction* search_action,
GtkWidget* entry_uri;
GtkWidget* entry_token;
- toplevel = gtk_widget_get_toplevel (search_action->treeview);
+ toplevel = search_action->treeview ? gtk_widget_get_toplevel (search_action->treeview) : NULL;
dialog = gtk_dialog_new_with_buttons (
new_engine ? _("Add search engine") : _("Edit search engine"),
toplevel ? GTK_WINDOW (toplevel) : NULL,
diff --git a/midori/midori-session.c b/midori/midori-session.c
index 7c2e7636..a40ef692 100644
--- a/midori/midori-session.c
+++ b/midori/midori-session.c
@@ -316,8 +316,6 @@ midori_load_soup_session_full (gpointer settings)
SoupCookieJar* jar;
gchar* config_file;
SoupSessionFeature* feature;
- gboolean have_new_cookies;
- SoupSessionFeature* feature_import;
midori_load_soup_session (settings);
diff --git a/midori/midori-settings.vala b/midori/midori-settings.vala
index fbbe9467..387aafaa 100644
--- a/midori/midori-settings.vala
+++ b/midori/midori-settings.vala
@@ -153,6 +153,7 @@ namespace Midori {
public bool close_buttons_on_tabs { get; set; default = true; }
public bool open_tabs_in_the_background { get; set; default = true; }
public bool open_tabs_next_to_current { get; set; default = true; }
+ // [Deprecated (since = "0.5.7")]
public bool always_show_tabbar { get; set; default = true; }
public string homepage { get; set; default = "about:search"; }
diff --git a/midori/midori-speeddial.vala b/midori/midori-speeddial.vala
index ff886e25..f069e131 100644
--- a/midori/midori-speeddial.vala
+++ b/midori/midori-speeddial.vala
@@ -32,8 +32,10 @@ namespace Midori {
string filename;
string? html = null;
List<Spec> thumb_queue = null;
+#if !HAVE_WEBKIT2
WebKit.WebView thumb_view = null;
Spec? spec = null;
+#endif
public GLib.KeyFile keyfile;
public bool close_buttons_left { get; set; default = false; }
@@ -128,8 +130,7 @@ namespace Midori {
}
catch (KeyFileError error) { }
}
- if (&count != null)
- count = slot_count;
+ count = slot_count;
uint slot = 1;
while (slot <= slot_count) {
@@ -340,19 +341,19 @@ namespace Midori {
refresh ();
}
- void load_status (GLib.Object thumb_view_, ParamSpec pspec) {
#if !HAVE_WEBKIT2
+ void load_status (GLib.Object thumb_view_, ParamSpec pspec) {
if (thumb_view.load_status != WebKit.LoadStatus.FINISHED
&& thumb_view.load_status != WebKit.LoadStatus.FAILED)
return;
thumb_view.notify["load-status"].disconnect (load_status);
/* Schedule an idle to give the offscreen time to draw */
Idle.add (save_thumbnail);
-#endif
}
+#endif
- bool save_thumbnail () {
#if !HAVE_WEBKIT2
+ bool save_thumbnail () {
return_val_if_fail (spec != null, false);
var offscreen = (thumb_view.parent as Gtk.OffscreenWindow);
@@ -386,9 +387,9 @@ namespace Midori {
thumb_view.notify["load-status"].connect (load_status);
thumb_view.load_uri (spec.uri);
}
-#endif
return false;
}
+#endif
void get_thumb (string dial_id, string uri) {
#if !HAVE_WEBKIT2
diff --git a/midori/midori-tab.vala b/midori/midori-tab.vala
index 36c34ee2..a616e4bb 100644
--- a/midori/midori-tab.vala
+++ b/midori/midori-tab.vala
@@ -36,10 +36,6 @@ namespace Midori {
public class Tab : Gtk.VBox {
public WebKit.WebView web_view { get; private set; }
- #if HAVE_GRANITE_CLUTTER
- public Granite.Widgets.NavigationBox navigation_box { get; private set; }
- #endif
-
private string current_uri = "about:blank";
public string uri { get {
return current_uri;
@@ -51,6 +47,9 @@ namespace Midori {
/* Special is an error, blank or delayed page */
public bool special { get; protected set; default = false; }
+ /* Minimizing a tab indicates that only the icon should be shown.
+ Since: 0.1.8 */
+ public bool minimized { get; set; default = false; }
/* Since: 0.4.8 */
public string mime_type { get; protected set; default = "text/plain"; }
/* Since: 0.1.2 */
@@ -58,8 +57,18 @@ namespace Midori {
public LoadStatus load_status { get; protected set; default = LoadStatus.FINISHED; }
public string? statusbar_text { get; protected set; default = null; }
/* Since: 0.5.0 */
+
public Gdk.Color? fg_color { get; protected set; default = null; }
- public Gdk.Color? bg_color { get; protected set; default = null; }
+ private Gdk.Color? bg_color_ = null;
+ public Gdk.Color? bg_color { get {
+ return bg_color_;
+ } protected set {
+ bg_color_ = value;
+ colors_changed ();
+ } }
+ /* After fg_color and bg_color have changed.
+ Since: 0.5.7 */
+ public signal void colors_changed ();
/* Special pages don't convey progress */
private double current_progress = 0.0;
@@ -105,10 +114,6 @@ namespace Midori {
orientation = Gtk.Orientation.VERTICAL;
#endif
- #if HAVE_GRANITE_CLUTTER
- navigation_box = new Granite.Widgets.NavigationBox ();
- #endif
-
web_view = new WebKit.WebView ();
/* Load something to avoid a bug where WebKit might not set a main frame */
web_view.load_uri ("");
@@ -151,7 +156,7 @@ namespace Midori {
#endif
public bool can_view_source () {
- if (is_blank () || special || view_source)
+ if (view_source)
return false;
string content_type = ContentType.from_mime_type (mime_type);
#if HAVE_WIN32
@@ -221,9 +226,6 @@ namespace Midori {
}
public void go_forward () {
- #if HAVE_GRANITE_CLUTTER
- navigation_box.forward ();
- #endif
web_view.go_forward ();
}
diff --git a/midori/midori-view.c b/midori/midori-view.c
index 56a836a0..88ad9b34 100644
--- a/midori/midori-view.c
+++ b/midori/midori-view.c
@@ -22,10 +22,6 @@
#include <config.h>
-#ifdef HAVE_GRANITE
-#include <granite.h>
-#endif
-
#ifdef HAVE_GCR
#define GCR_API_SUBJECT_TO_CHANGE
#include <gcr/gcr.h>
@@ -109,21 +105,13 @@ struct _MidoriView
KatzeArray* news_feeds;
gboolean open_tabs_in_the_background;
- gboolean close_buttons_on_tabs;
MidoriNewPage open_new_pages_in;
gint find_links;
gint alerts;
+ GtkWidget* tab_label;
GtkWidget* menu_item;
PangoEllipsizeMode ellipsize;
- #ifdef HAVE_GRANITE
- GraniteWidgetsTab* tab;
- #else
- GtkWidget* tab_label;
- GtkWidget* tab_icon;
- GtkWidget* tab_title;
- GtkWidget* tab_close;
- #endif
KatzeItem* item;
gint scrollh, scrollv;
GtkWidget* scrolled_window;
@@ -355,26 +343,6 @@ midori_view_class_init (MidoriViewClass* class)
GDK_TYPE_PIXBUF,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
- /**
- * MidoriView:minimized:
- *
- * Whether the view is minimized or in normal state.
- *
- * Minimizing a view indicates that only the icon should
- * be advertised rather than the full blown tab label and
- * it might otherwise be presented specially.
- *
- * Since: 0.1.8
- */
- g_object_class_install_property (gobject_class,
- PROP_MINIMIZED,
- g_param_spec_boolean (
- "minimized",
- "Minimized",
- "Whether the view is minimized or in normal state",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
g_object_class_install_property (gobject_class,
PROP_ZOOM_LEVEL,
g_param_spec_float (
@@ -428,21 +396,6 @@ midori_view_set_title (MidoriView* view, const gchar* title)
const gchar* uri = midori_tab_get_uri (MIDORI_TAB (view));
katze_assign (view->title, g_strdup (midori_tab_get_display_title (title, uri)));
view->ellipsize = midori_tab_get_display_ellipsize (view->title, uri);
-
- #ifdef HAVE_GRANITE
- if (view->tab)
- g_object_set (view->tab,
- "label", view->title, "ellipsize-mode", view->ellipsize, NULL);
- #else
- if (view->tab_label)
- {
- gtk_label_set_text (GTK_LABEL (view->tab_title), view->title);
- gtk_widget_set_tooltip_text (view->tab_icon, view->title);
- gtk_widget_set_tooltip_text (view->tab_title, view->title);
- if (gtk_label_get_angle (GTK_LABEL (view->tab_title)) == 0.0)
- gtk_label_set_ellipsize (GTK_LABEL (view->tab_title), view->ellipsize);
- }
- #endif
if (view->menu_item)
gtk_label_set_text (GTK_LABEL (gtk_bin_get_child (GTK_BIN (
view->menu_item))), view->title);
@@ -463,20 +416,6 @@ midori_view_apply_icon (MidoriView* view,
katze_object_assign (view->icon, icon);
g_object_notify (G_OBJECT (view), "icon");
- #ifdef HAVE_GRANITE
- if (view->tab)
- g_object_set (view->tab, "icon", icon, NULL);
- #else
- if (view->tab_icon)
- {
- if (icon_name && !strchr (icon_name, '/'))
- katze_throbber_set_static_icon_name (KATZE_THROBBER (view->tab_icon),
- icon_name);
- else
- katze_throbber_set_static_pixbuf (KATZE_THROBBER (view->tab_icon),
- view->icon);
- }
- #endif
if (view->menu_item)
{
GtkWidget* image = katze_item_get_image (view->item, view->web_view);
@@ -541,23 +480,8 @@ static void
midori_view_update_load_status (MidoriView* view,
MidoriLoadStatus load_status)
{
- if (midori_tab_get_load_status (MIDORI_TAB (view)) == load_status)
- return;
-
- midori_tab_set_load_status (MIDORI_TAB (view), load_status);
-
- #ifdef HAVE_GRANITE
- if (view->tab)
- {
- g_object_set (view->tab, "working",
- midori_view_get_progress (view) > 0.0, NULL);
- g_object_set (view->tab, "menu", midori_view_get_tab_menu (view), NULL);
- }
- #else
- if (view->tab_icon)
- katze_throbber_set_animated (KATZE_THROBBER (view->tab_icon),
- midori_view_get_progress (view) > 0.0);
- #endif
+ if (midori_tab_get_load_status (MIDORI_TAB (view)) != load_status)
+ midori_tab_set_load_status (MIDORI_TAB (view), load_status);
}
#if defined (HAVE_LIBSOUP_2_29_91)
@@ -755,11 +679,6 @@ midori_location_action_tls_flags_to_string (GTlsCertificateFlags flags);
static void
midori_view_load_committed (MidoriView* view)
{
- #ifdef HAVE_GRANITE_CLUTTER
- GraniteWidgetsNavigationBox* navigation_box = midori_tab_get_navigation_box (MIDORI_TAB (view));
- granite_widgets_navigation_box_transition_ready (navigation_box);
- #endif
-
katze_assign (view->icon_uri, NULL);
GList* children = gtk_container_get_children (GTK_CONTAINER (view));
@@ -901,11 +820,6 @@ midori_view_web_view_resource_request_cb (WebKitWebView* web_view,
GdkPixbuf* pixbuf;
const gchar* icon_name = &uri[8] ? &uri[8] : "";
gint icon_size = GTK_ICON_SIZE_MENU;
- GdkScreen* screen = gtk_widget_get_screen (GTK_WIDGET (view));
- GtkIconTheme* icon_theme = gtk_icon_theme_get_for_screen (screen);
- gint real_icon_size;
- GtkIconInfo* icon_info;
- const gchar* icon_filename;
static gint icon_size_large_dialog = 0;
if (!icon_size_large_dialog)
@@ -1165,13 +1079,13 @@ midori_view_set_html (MidoriView* view,
uri = "about:blank";
#ifndef HAVE_WEBKIT2
WebKitWebFrame* main_frame = webkit_web_view_get_main_frame (web_view);
+ if (!web_frame)
+ web_frame = main_frame;
if (web_frame == main_frame)
{
katze_item_set_uri (view->item, uri);
midori_tab_set_special (MIDORI_TAB (view), TRUE);
}
- if (!web_frame)
- web_frame = main_frame;
webkit_web_frame_load_alternate_string (
web_frame, data, uri, uri);
#else
@@ -1206,6 +1120,13 @@ midori_view_display_error (MidoriView* view,
const gchar* icon;
gchar* favicon;
gchar* result;
+ gboolean is_main_frame;
+
+ #ifdef HAVE_WEBKIT2
+ is_main_frame = TRUE;
+ #else
+ is_main_frame = web_frame && (webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (view->web_view)) == web_frame);
+ #endif
#if !GTK_CHECK_VERSION (3, 0, 0)
/* g_object_get_valist: object class `GtkSettings' has no property named `gtk-button-images' */
@@ -1233,6 +1154,7 @@ midori_view_display_error (MidoriView* view,
"{tryagain}", try_again,
"{uri}", uri,
"{hide-button-images}", show_button_images ? "" : "display:none",
+ "{autofocus}", is_main_frame ? "autofocus=\"true\" " : "",
NULL);
g_free (favicon);
g_free (title_escaped);
@@ -1261,6 +1183,10 @@ webkit_web_view_load_error_cb (WebKitWebView* web_view,
GError* error,
MidoriView* view)
{
+ /*in WebKit2's UIProcess/API/gtk/WebKitLoaderClient.cpp,
+ didFailProvisionalLoadWithErrorForFrame early-returns if the frame isn't
+ main, so we know that the pertinent frame here is the view's main frame--so
+ it's safe for midori_view_display_error to assume it fills in a main frame*/
#ifdef HAVE_WEBKIT2
void* web_frame = NULL;
#endif
@@ -1617,9 +1543,6 @@ midori_view_web_view_button_press_event_cb (WebKitWebView* web_view,
GdkEventButton* event,
MidoriView* view)
{
- GtkClipboard* clipboard;
- gchar* uri;
- gchar* new_uri;
const gchar* link_uri;
gboolean background;
@@ -1685,7 +1608,8 @@ midori_view_web_view_button_press_event_cb (WebKitWebView* web_view,
g_object_unref (result);
if (!is_editable)
{
- clipboard = gtk_clipboard_get_for_display (
+ gchar* uri;
+ GtkClipboard* clipboard = gtk_clipboard_get_for_display (
gtk_widget_get_display (GTK_WIDGET (view)),
GDK_SELECTION_PRIMARY);
if ((uri = gtk_clipboard_wait_for_text (clipboard)))
@@ -1699,7 +1623,7 @@ midori_view_web_view_button_press_event_cb (WebKitWebView* web_view,
/* Hold Alt to search for the selected word */
if (event->state & GDK_MOD1_MASK)
{
- new_uri = sokoke_magic_uri (uri, TRUE, FALSE);
+ gchar* new_uri = sokoke_magic_uri (uri, TRUE, FALSE);
if (!new_uri)
{
gchar* search = katze_object_get_string (
@@ -1743,7 +1667,10 @@ midori_view_web_view_button_press_event_cb (WebKitWebView* web_view,
return FALSE;
break;
case 3:
+ /* Older versions don't have the context-menu signal */
+ #if WEBKIT_CHECK_VERSION (1, 10, 0)
if (event->state & GDK_CONTROL_MASK)
+ #endif
{
/* Ctrl + Right-click suppresses javascript button handling */
GtkWidget* menu = gtk_menu_new ();
@@ -2103,10 +2030,10 @@ midori_view_get_data_for_uri (MidoriView* view,
const gchar* uri)
{
GList* resources = midori_view_get_resources (view);
- GList* list;
GString* result = NULL;
#ifndef HAVE_WEBKIT2
+ GList* list;
for (list = resources; list; list = g_list_next (list))
{
WebKitWebResource* resource = WEBKIT_WEB_RESOURCE (list->data);
@@ -2211,6 +2138,7 @@ midori_web_view_menu_video_save_activate_cb (GtkAction* action,
g_free (uri);
}
+#ifndef HAVE_WEBKIT2
static void
midori_view_menu_open_email_activate_cb (GtkAction* action,
gpointer user_data)
@@ -2222,6 +2150,7 @@ midori_view_menu_open_email_activate_cb (GtkAction* action,
uri, GDK_CURRENT_TIME, NULL);
g_free (uri);
}
+#endif
static void
midori_view_menu_open_link_tab_activate_cb (GtkAction* action,
@@ -2554,6 +2483,7 @@ midori_view_get_page_context_action (MidoriView* view,
midori_context_action_add_by_name (menu, "AddSpeedDial");
midori_context_action_add_by_name (menu, "SaveAs");
midori_context_action_add_by_name (menu, "SourceView");
+ midori_context_action_add_by_name (menu, "SourceViewDom");
if (!g_object_get_data (G_OBJECT (browser), "midori-toolbars-visible"))
midori_context_action_add_by_name (menu, "Navigationbar");
if (state & GDK_WINDOW_STATE_FULLSCREEN)
@@ -2601,6 +2531,7 @@ midori_view_populate_popup (MidoriView* view,
midori_context_action_create_menu (context_action, GTK_MENU (menu), FALSE);
}
+#if WEBKIT_CHECK_VERSION (1, 10, 0)
static gboolean
midori_view_web_view_context_menu_cb (WebKitWebView* web_view,
#ifdef HAVE_WEBKIT2
@@ -2629,6 +2560,7 @@ midori_view_web_view_context_menu_cb (WebKitWebView* web_view,
#endif
return FALSE;
}
+#endif
#ifndef HAVE_WEBKIT2
static gboolean
@@ -2646,7 +2578,7 @@ webkit_web_view_web_view_ready_cb (GtkWidget* web_view,
MidoriNewView where = MIDORI_NEW_VIEW_TAB;
GtkWidget* new_view = GTK_WIDGET (midori_view_get_for_widget (web_view));
- WebKitWebWindowFeatures* features = webkit_web_view_get_window_features (web_view);
+ WebKitWebWindowFeatures* features = webkit_web_view_get_window_features (WEBKIT_WEB_VIEW (web_view));
gboolean locationbar_visible, menubar_visible, toolbar_visible;
gint width, height;
g_object_get (features,
@@ -3045,7 +2977,6 @@ midori_view_init (MidoriView* view)
view->title = NULL;
view->icon = NULL;
view->icon_uri = NULL;
- view->minimized = FALSE;
view->hit_test = NULL;
view->link_uri = NULL;
view->selected_text = NULL;
@@ -3118,16 +3049,6 @@ midori_view_set_property (GObject* object,
view->minimized ? 1 : -1);
g_signal_handlers_unblock_by_func (view->item,
midori_view_item_meta_data_changed, view);
- #ifdef HAVE_GRANITE
- if (view->tab)
- g_object_set (view->tab,
- "fixed", view->minimized,
- "label", midori_view_get_display_title (view),
- NULL);
- #else
- if (view->tab_label)
- sokoke_widget_set_visible (view->tab_title, !view->minimized);
- #endif
break;
case PROP_ZOOM_LEVEL:
midori_view_set_zoom_level (view, g_value_get_float (value));
@@ -3157,9 +3078,6 @@ midori_view_get_property (GObject* object,
case PROP_ICON:
g_value_set_object (value, view->icon);
break;
- case PROP_MINIMIZED:
- g_value_set_boolean (value, view->minimized);
- break;
case PROP_ZOOM_LEVEL:
g_value_set_float (value, midori_view_get_zoom_level (view));
break;
@@ -3206,7 +3124,6 @@ _midori_view_set_settings (MidoriView* view,
g_object_get (view->settings,
"zoom-level", &zoom_level,
"zoom-text-and-images", &zoom_text_and_images,
- "close-buttons-on-tabs", &view->close_buttons_on_tabs,
"open-new-pages-in", &view->open_new_pages_in,
"open-tabs-in-the-background", &view->open_tabs_in_the_background,
NULL);
@@ -3268,8 +3185,8 @@ midori_view_new_with_item (KatzeItem* item,
if (item)
{
katze_object_assign (view->item, katze_item_copy (item));
- view->minimized = katze_item_get_meta_string (
- view->item, "minimized") != NULL;
+ midori_tab_set_minimized (MIDORI_TAB (view),
+ katze_item_get_meta_string (view->item, "minimized") != NULL);
}
gtk_widget_show ((GtkWidget*)view);
return (GtkWidget*)view;
@@ -3297,14 +3214,6 @@ midori_view_settings_notify_cb (MidoriWebSettings* settings,
g_value_get_boolean (&value));
}
#endif
- else if (name == g_intern_string ("close-buttons-on-tabs"))
- {
- view->close_buttons_on_tabs = g_value_get_boolean (&value);
- #ifndef HAVE_GRANITE
- sokoke_widget_set_visible (view->tab_close,
- view->close_buttons_on_tabs);
- #endif
- }
else if (name == g_intern_string ("open-tabs-in-the-background"))
view->open_tabs_in_the_background = g_value_get_boolean (&value);
else if (name == g_intern_string ("enable-javascript"))
@@ -3395,8 +3304,6 @@ midori_view_web_inspector_construct_window (gpointer inspector,
const gchar* label;
GtkWidget* window;
GtkWidget* toplevel;
- GdkScreen* screen;
- gint width, height;
const gchar* icon_name;
GtkIconTheme* icon_theme;
GdkPixbuf* icon;
@@ -3525,7 +3432,6 @@ midori_view_constructor (GType type,
guint n_construct_properties,
GObjectConstructParam* construct_properties)
{
- gpointer inspector;
GObject* object = G_OBJECT_CLASS (midori_view_parent_class)->constructor (
type, n_construct_properties, construct_properties);
MidoriView* view = MIDORI_VIEW (object);
@@ -3580,8 +3486,10 @@ midori_view_constructor (GType type,
webkit_web_view_hovering_over_link_cb, view,
"signal::status-bar-text-changed",
webkit_web_view_statusbar_text_changed_cb, view,
+ #if WEBKIT_CHECK_VERSION (1, 10, 0)
"signal::context-menu",
midori_view_web_view_context_menu_cb, view,
+ #endif
"signal::console-message",
webkit_web_view_console_message_cb, view,
"signal::download-requested",
@@ -3621,16 +3529,7 @@ midori_view_constructor (GType type,
#if GTK_CHECK_VERSION(3, 2, 0)
view->overlay = gtk_overlay_new ();
gtk_widget_show (view->overlay);
- #ifdef HAVE_GRANITE_CLUTTER
- {
- GraniteWidgetsNavigationBox* navigation_box = midori_tab_get_navigation_box (MIDORI_TAB (view));
- granite_widgets_navigation_box_add (navigation_box, GTK_WIDGET (view->scrolled_window));
- gtk_widget_show (GTK_WIDGET (view->scrolled_window));
- gtk_container_add (GTK_CONTAINER (view->overlay), GTK_WIDGET (navigation_box));
- }
- #else
gtk_container_add (GTK_CONTAINER (view->overlay), view->scrolled_window);
- #endif
gtk_box_pack_start (GTK_BOX (view), view->overlay, TRUE, TRUE, 0);
/* Overlays must be created before showing GtkOverlay as of GTK+ 3.2 */
@@ -3661,7 +3560,7 @@ midori_view_constructor (GType type,
#ifndef HAVE_WEBKIT2
gtk_container_add (GTK_CONTAINER (view->scrolled_window), view->web_view);
- inspector = webkit_web_view_get_inspector ((WebKitWebView*)view->web_view);
+ gpointer inspector = webkit_web_view_get_inspector ((WebKitWebView*)view->web_view);
g_object_connect (inspector,
"signal::inspect-web-view",
midori_view_web_inspector_inspect_web_view_cb, view,
@@ -3891,7 +3790,7 @@ midori_view_set_uri (MidoriView* view,
if (handled)
return;
-
+
if (!strcmp (uri, "about:new"))
uri = midori_settings_get_tabhome (MIDORI_SETTINGS (view->settings));
if (!strcmp (uri, "about:home"))
@@ -4385,14 +4284,6 @@ midori_view_get_proxy_menu_item (MidoriView* view)
return view->menu_item;
}
-static void
-midori_view_tab_label_menu_duplicate_tab_cb (GtkAction* action,
- gpointer user_data)
-{
- MidoriView* view = user_data;
- midori_view_duplicate (view);
-}
-
GtkWidget*
midori_view_duplicate (MidoriView* view)
{
@@ -4405,37 +4296,6 @@ midori_view_duplicate (MidoriView* view)
return new_view;
}
-static void
-midori_view_tab_label_menu_close_other_tabs_cb (GtkAction* action,
- gpointer user_data)
-{
- GtkWidget* view = user_data;
- MidoriBrowser* browser = midori_browser_get_for_widget (view);
- GList* tabs = midori_browser_get_tabs (browser);
- for (; tabs; tabs = g_list_next (tabs))
- {
- if (tabs->data != view)
- midori_browser_close_tab (browser, tabs->data);
- }
- g_list_free (tabs);
-}
-
-static void
-midori_view_tab_label_menu_minimize_tab_cb (GtkAction* action,
- gpointer user_data)
-{
- MidoriView* view = user_data;
- g_object_set (view, "minimized", !view->minimized, NULL);
-}
-
-static void
-midori_view_tab_label_menu_close_cb (GtkAction* action,
- gpointer user_data)
-{
- GtkWidget* view = user_data;
- midori_browser_close_tab (midori_browser_get_for_widget (view), view);
-}
-
/**
* midori_view_get_tab_menu:
* @view: a #MidoriView
@@ -4446,240 +4306,14 @@ midori_view_tab_label_menu_close_cb (GtkAction* action,
* Return value: a #GtkMenu
*
* Since: 0.1.8
+ * Deprecated: 0.5.7: Use MidoriNotebook API instead.
**/
GtkWidget*
midori_view_get_tab_menu (MidoriView* view)
{
g_return_val_if_fail (MIDORI_IS_VIEW (view), NULL);
- MidoriBrowser* browser = midori_browser_get_for_widget (GTK_WIDGET (view));
- g_return_val_if_fail (browser != NULL, NULL);
-
- GtkActionGroup* actions = midori_browser_get_action_group (browser);
- MidoriContextAction* menu = midori_context_action_new ("TabContextMenu", NULL, NULL, NULL);
- midori_context_action_add_action_group (menu, actions);
- gint pages = midori_browser_get_n_pages (browser);
-
- midori_context_action_add_by_name (menu, "TabNew");
- midori_context_action_add_by_name (menu, "UndoTabClose");
- midori_context_action_add (menu, NULL);
- midori_context_action_add_simple (menu, "TabWindowNew", _("Open in New _Window"), NULL, STOCK_WINDOW_NEW,
- midori_view_tab_label_menu_window_new_cb, view);
- midori_context_action_add_simple (menu, "TabDuplicate", _("_Duplicate Tab"), NULL, NULL,
- midori_view_tab_label_menu_duplicate_tab_cb, view);
- midori_context_action_add_simple (menu, "TabMinimize",
- view->minimized ? _("Show Tab _Label") : _("Show Tab _Icon Only"), NULL, NULL,
- midori_view_tab_label_menu_minimize_tab_cb, view);
- midori_context_action_add (menu, NULL);
- GtkAction* action = gtk_action_new ("TabCloseOther", g_dngettext (NULL, "Close Ot_her Tab", "Close Ot_her Tabs", pages - 1), NULL, NULL);
- g_signal_connect (action, "activate", G_CALLBACK (midori_view_tab_label_menu_close_other_tabs_cb), view);
- gtk_action_set_sensitive (action, pages > 1);
- midori_context_action_add (menu, action);
- midori_context_action_add_simple (menu, "TabClose", NULL, NULL, GTK_STOCK_CLOSE,
- midori_view_tab_label_menu_close_cb, view);
-
- return GTK_WIDGET (midori_context_action_create_menu (menu, NULL, FALSE));
-}
-
-#ifdef HAVE_GRANITE
-GraniteWidgetsTab*
-midori_view_get_tab (MidoriView* view)
-{
- if (view->tab == NULL)
- {
- view->tab = granite_widgets_tab_new (
- midori_view_get_display_title (view), G_ICON (view->icon), GTK_WIDGET (view));
- g_object_set (view->tab, "fixed", view->minimized, NULL);
- }
- return view->tab;
-}
-
-void
-midori_view_set_tab (MidoriView* view,
- GraniteWidgetsTab* tab)
-{
- g_return_if_fail (MIDORI_IS_VIEW (view));
-
- view->tab = tab;
- g_object_set (tab,
- "label", midori_view_get_display_title (view),
- "icon", G_ICON (view->icon),
- "page", GTK_WIDGET (view),
- "fixed", view->minimized,
- NULL);
-}
-
-GtkWidget*
-midori_view_get_proxy_tab_label (MidoriView* view)
-{
- g_return_val_if_fail (MIDORI_IS_VIEW (view), NULL);
-
- GtkWidget* tab = GTK_WIDGET (midori_view_get_tab (view));
- return tab;
-}
-
-#else
-static gboolean
-midori_view_tab_label_button_press_event (GtkWidget* tab_label,
- GdkEventButton* event,
- GtkWidget* widget)
-{
- if (event->button == 2)
- {
- /* Close the widget on middle click */
- midori_browser_close_tab (midori_browser_get_for_widget (widget), widget);
- return TRUE;
- }
- else if (MIDORI_EVENT_CONTEXT_MENU (event))
- {
- /* Show a context menu on right click */
- GtkWidget* menu = midori_view_get_tab_menu (MIDORI_VIEW (widget));
-
- katze_widget_popup (widget, GTK_MENU (menu),
- event, KATZE_MENU_POSITION_CURSOR);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-midori_view_tab_close_clicked (GtkWidget* tab_close,
- GtkWidget* widget)
-{
- midori_browser_close_tab (midori_browser_get_for_widget (widget), widget);
-}
-
-#if !GTK_CHECK_VERSION (3, 0, 0)
-static void
-midori_view_tab_icon_style_set_cb (GtkWidget* tab_close,
- GtkStyle* previous_style)
-{
- GtkRequisition size;
- gtk_widget_size_request (gtk_bin_get_child (GTK_BIN (tab_close)), &size);
- gtk_widget_set_size_request (tab_close, size.width, size.height);
-}
-#endif
-
-static void
-midori_view_update_tab_title (MidoriView* view,
- gdouble angle)
-{
- if (angle == 0.0)
- gtk_label_set_ellipsize (GTK_LABEL (view->tab_title), view->ellipsize);
- else
- gtk_label_set_ellipsize (GTK_LABEL (view->tab_title), PANGO_ELLIPSIZE_NONE);
- gtk_label_set_angle (GTK_LABEL (view->tab_title), angle);
-}
-
-static void
-gtk_box_repack (GtkBox* box,
- GtkWidget* child)
-{
- GtkWidget* old_box;
- gboolean expand, fill;
- guint padding;
- GtkPackType pack_type;
-
- old_box = gtk_widget_get_parent (child);
- g_return_if_fail (GTK_IS_BOX (old_box));
-
- gtk_box_query_child_packing (GTK_BOX (old_box), child,
- &expand, &fill, &padding, &pack_type);
-
- g_object_ref (child);
- gtk_container_remove (GTK_CONTAINER (old_box), child);
- if (pack_type == GTK_PACK_START)
- gtk_box_pack_start (box, child, expand, fill, padding);
- else
- gtk_box_pack_end (box, child, expand, fill, padding);
- g_object_unref (child);
-}
-
-static void
-midori_view_tab_label_parent_set (GtkWidget* tab_label,
-#if GTK_CHECK_VERSION(3,0,0)
- GObject* old_parent,
-#else
- GtkObject* old_parent,
-#endif
- MidoriView* view)
-{
- GtkWidget* parent;
-
- /* FIXME: Disconnect orientation notification
- if (old_parent)
- ; */
-
- if (!(parent = gtk_widget_get_parent (tab_label)))
- return;
-
- if (GTK_IS_NOTEBOOK (parent))
- {
- GtkPositionType pos;
- gdouble old_angle, angle;
- GtkWidget* box;
-
- pos = gtk_notebook_get_tab_pos (GTK_NOTEBOOK (parent));
- old_angle = gtk_label_get_angle (GTK_LABEL (view->tab_title));
- switch (pos)
- {
- case GTK_POS_LEFT:
- angle = 90.0;
- break;
- case GTK_POS_RIGHT:
- angle = 270.0;
- break;
- default:
- angle = 0.0;
- }
-
- if (old_angle != angle)
- {
- GtkWidget* align;
-
- if (angle == 0.0)
- box = gtk_hbox_new (FALSE, 1);
- else
- box = gtk_vbox_new (FALSE, 1);
- gtk_box_repack (GTK_BOX (box), view->tab_icon);
- gtk_box_repack (GTK_BOX (box), view->tab_title);
- align = gtk_widget_get_parent (view->tab_close);
- gtk_box_repack (GTK_BOX (box), align);
-
- gtk_container_remove (GTK_CONTAINER (tab_label),
- gtk_bin_get_child (GTK_BIN (tab_label)));
- gtk_container_add (GTK_CONTAINER (tab_label), GTK_WIDGET (box));
- gtk_widget_show (box);
- }
-
- midori_view_update_tab_title (view, angle);
-
- /* FIXME: Connect orientation notification */
- }
-}
-
-static void midori_view_tab_label_data_received (GtkWidget* widget,
- GdkDragContext* context,
- gint x,
- gint y,
- GtkSelectionData* data,
- guint ttype,
- guint timestamp,
- MidoriView* view)
-{
- gchar** uri = gtk_selection_data_get_uris (data);
- if (uri != NULL)
- {
- midori_view_set_uri (view, uri[0]);
- g_strfreev (uri);
- }
- else
- {
- gchar* text = (gchar*) gtk_selection_data_get_text (data);
- midori_view_set_uri (view, text);
- g_free (text);
- }
+ return gtk_menu_new ();
}
/**
@@ -4689,115 +4323,22 @@ static void midori_view_tab_label_data_received (GtkWidget* widget,
* Retrieves a proxy tab label that is typically used when
* adding the view to a notebook.
*
- * Note that the label actually adjusts its orientation
- * to the according tab position when used in a notebook.
- *
- * The label is created on the first call and will be updated to reflect
- * changes of the loading progress and title.
- *
- * The label is valid until it is removed from its container.
- *
* Return value: the proxy #GtkEventBox
+ *
+ * Deprecated: 0.5.7: Don't use this label.
**/
GtkWidget*
midori_view_get_proxy_tab_label (MidoriView* view)
{
- GtkWidget* event_box;
- GtkWidget* hbox;
- #if !GTK_CHECK_VERSION (3, 0, 0)
- static const gchar style_fixup[] =
- "style \"midori-close-button-style\"\n"
- "{\n"
- "GtkWidget::focus-padding = 0\n"
- "GtkWidget::focus-line-width = 0\n"
- "xthickness = 0\n"
- "ythickness = 0\n"
- "}\n"
- "widget \"*.midori-close-button\" style \"midori-close-button-style\"";
- #endif
- GtkWidget* image;
- GtkWidget* align;
-
g_return_val_if_fail (MIDORI_IS_VIEW (view), NULL);
if (!view->tab_label)
{
- view->tab_icon = katze_throbber_new ();
- katze_throbber_set_static_pixbuf (KATZE_THROBBER (view->tab_icon),
- midori_view_get_icon (view));
-
- view->tab_title = gtk_label_new (midori_view_get_display_title (view));
- gtk_misc_set_alignment (GTK_MISC (view->tab_title), 0.0, 0.5);
- gtk_misc_set_padding (GTK_MISC (view->tab_title), 0, 0);
-
- event_box = gtk_event_box_new ();
- gtk_event_box_set_visible_window (GTK_EVENT_BOX (event_box), FALSE);
- hbox = gtk_hbox_new (FALSE, 1);
- gtk_container_add (GTK_CONTAINER (event_box), GTK_WIDGET (hbox));
- midori_view_update_tab_title (view, 0.0);
-
- view->tab_close = gtk_button_new ();
- gtk_button_set_relief (GTK_BUTTON (view->tab_close), GTK_RELIEF_NONE);
- gtk_button_set_focus_on_click (GTK_BUTTON (view->tab_close), FALSE);
- #if !GTK_CHECK_VERSION (3, 0, 0)
- gtk_rc_parse_string (style_fixup);
- gtk_widget_set_name (view->tab_close, "midori-close-button");
- g_signal_connect (view->tab_close, "style-set",
- G_CALLBACK (midori_view_tab_icon_style_set_cb), NULL);
- #endif
- image = gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
- gtk_container_add (GTK_CONTAINER (view->tab_close), image);
- align = gtk_alignment_new (1.0, 0.5, 0.0, 0.0);
- gtk_container_add (GTK_CONTAINER (align), view->tab_close);
-
- if (katze_object_get_boolean (view->settings, "close-buttons-left"))
- {
- gtk_box_pack_end (GTK_BOX (hbox), view->tab_icon, FALSE, FALSE, 0);
- gtk_box_pack_end (GTK_BOX (hbox), view->tab_title, TRUE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (hbox), align, FALSE, FALSE, 0);
- }
- else
- {
- gtk_box_pack_start (GTK_BOX (hbox), view->tab_icon, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (hbox), view->tab_title, TRUE, TRUE, 0);
- gtk_box_pack_end (GTK_BOX (hbox), align, FALSE, FALSE, 0);
- }
- gtk_widget_show_all (GTK_WIDGET (event_box));
-
- if (view->minimized)
- gtk_widget_hide (view->tab_title);
- if (!view->close_buttons_on_tabs)
- gtk_widget_hide (view->tab_close);
-
- g_signal_connect (event_box, "button-press-event",
- G_CALLBACK (midori_view_tab_label_button_press_event), view);
- g_signal_connect (view->tab_close, "button-press-event",
- G_CALLBACK (midori_view_tab_label_button_press_event), view);
- g_signal_connect (view->tab_close, "clicked",
- G_CALLBACK (midori_view_tab_close_clicked), view);
-
- view->tab_label = event_box;
- g_signal_connect (view->tab_icon, "destroy",
- G_CALLBACK (gtk_widget_destroyed),
- &view->tab_icon);
- g_signal_connect (view->tab_label, "destroy",
- G_CALLBACK (gtk_widget_destroyed),
- &view->tab_label);
-
- g_signal_connect (view->tab_label, "parent-set",
- G_CALLBACK (midori_view_tab_label_parent_set),
- view);
- gtk_drag_dest_set (view->tab_label, GTK_DEST_DEFAULT_ALL, NULL,
- 0, GDK_ACTION_COPY);
- gtk_drag_dest_add_text_targets (view->tab_label);
- gtk_drag_dest_add_uri_targets (view->tab_label);
- g_signal_connect (view->tab_label, "drag-data-received",
- G_CALLBACK (midori_view_tab_label_data_received),
- view);
+ view->tab_label = gtk_label_new ("dummy");
+ gtk_widget_show (view->tab_label);
}
return view->tab_label;
}
-#endif
/**
* midori_view_get_label_ellipsize:
@@ -4926,9 +4467,10 @@ midori_view_can_zoom_out (MidoriView* view)
* Since: 0.4.4
**/
gchar*
-midori_view_save_source (MidoriView* view,
+midori_view_save_source (MidoriView* view,
const gchar* uri,
- const gchar* outfile)
+ const gchar* outfile,
+ gboolean use_dom)
{
#ifndef HAVE_WEBKIT2
WebKitWebFrame *frame;
@@ -4942,8 +4484,24 @@ midori_view_save_source (MidoriView* view,
g_return_val_if_fail (MIDORI_IS_VIEW (view), NULL);
frame = webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (view->web_view));
- data_source = webkit_web_frame_get_data_source (frame);
- data = webkit_web_data_source_get_data (data_source);
+
+ if (use_dom)
+ {
+ WebKitDOMDocument* doc;
+
+ #if WEBKIT_CHECK_VERSION (1, 9, 5)
+ doc = webkit_web_frame_get_dom_document (frame);
+ #else
+ doc = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (view->web_view));
+ #endif
+
+ WebKitDOMElement* root = webkit_dom_document_query_selector (doc, ":root", NULL);
+ const gchar* content = webkit_dom_html_element_get_outer_html (WEBKIT_DOM_HTML_ELEMENT (root));
+ data = g_string_new (content);
+ } else {
+ data_source = webkit_web_frame_get_data_source (frame);
+ data = webkit_web_data_source_get_data (data_source);
+ }
if (uri == NULL)
uri = midori_view_get_display_uri (view);
@@ -5043,11 +4601,6 @@ midori_view_go_back (MidoriView* view)
{
g_return_if_fail (MIDORI_IS_VIEW (view));
- #ifdef HAVE_GRANITE_CLUTTER
- GraniteWidgetsNavigationBox* navigation_box = midori_tab_get_navigation_box (MIDORI_TAB (view));
- granite_widgets_navigation_box_back (navigation_box);
- #endif
-
webkit_web_view_go_back (WEBKIT_WEB_VIEW (view->web_view));
/* Force the speed dial to kick in if going back to a blank page */
if (midori_view_is_blank (view))
@@ -5211,9 +4764,17 @@ midori_view_print (MidoriView* view)
GtkPrintSettings* settings = gtk_print_settings_new ();
webkit_print_operation_set_print_settings (operation, settings);
g_object_unref (settings);
- webkit_print_operation_run_dialog (operation,
- GTK_WINDOW (midori_browser_get_for_widget (view->web_view)));
+
+ if (katze_object_get_boolean (view->settings, "print-without-dialog")) {
+ webkit_print_operation_print (operation);
+ }
+ else {
+ webkit_print_operation_run_dialog (operation,
+ GTK_WINDOW (midori_browser_get_for_widget (view->web_view)));
+ }
g_object_unref (operation);
+
+
#else
WebKitWebFrame* frame = webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (view->web_view));
GtkPrintOperation* operation = gtk_print_operation_new ();
@@ -5222,8 +4783,15 @@ midori_view_print (MidoriView* view)
g_signal_connect (operation, "create-custom-widget",
G_CALLBACK (midori_view_print_create_custom_widget_cb), view);
GError* error = NULL;
- webkit_web_frame_print_full (frame, operation,
- GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, &error);
+
+ if (katze_object_get_boolean (view->settings, "print-without-dialog")) {
+ webkit_web_frame_print_full (frame, operation,
+ GTK_PRINT_OPERATION_ACTION_PRINT, &error);
+ }
+ else {
+ webkit_web_frame_print_full (frame, operation,
+ GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, &error);
+ }
g_object_unref (operation);
if (error)
@@ -5385,60 +4953,22 @@ midori_view_get_for_widget (GtkWidget* web_view)
#endif
return MIDORI_VIEW (view);
}
-
+/**
+ * midori_view_set_colors:
+ * @view: a #MidoriView
+ * @fg_color: a #GdkColor, or %NULL
+ * @bg_color: a #GdkColor, or %NULL
+ *
+ * Sets colors on the label.
+ *
+ * Deprecated: 0.5.7: Use fg_color/ bg_color on Midori.Tab.
+ **/
void
midori_view_set_colors (MidoriView* view,
GdkColor* fg_color,
GdkColor* bg_color)
{
- /*
- The proxy tab label is what's put in the notebook,
- in all known cases a GtkEventBox
- Contained can be a GtkLabel or a GtkBox including a GtkLabel
- Granite as of this writing uses a GtkLabel (which may change)
- */
- GtkWidget* box = midori_view_get_proxy_tab_label (view);
- GtkWidget* event_box = box;
- if (GTK_IS_BOX (box))
- {
- GList* children = gtk_container_get_children (GTK_CONTAINER (box));
- for (; children != NULL; children = g_list_next (children))
- if (GTK_IS_EVENT_BOX (children->data))
- {
- event_box = children->data;
- break;
- }
- g_list_free (children);
- }
-
- GtkWidget* label = gtk_bin_get_child (GTK_BIN (event_box));
- if (GTK_IS_BOX (label))
- {
- GList* children = gtk_container_get_children (GTK_CONTAINER (label));
- for (; children != NULL; children = g_list_next (children))
- if (GTK_IS_LABEL (children->data))
- {
- label = children->data;
- break;
- }
- g_list_free (children);
- }
-
midori_tab_set_fg_color (MIDORI_TAB (view), fg_color);
midori_tab_set_bg_color (MIDORI_TAB (view), bg_color);
-
- gtk_event_box_set_visible_window (GTK_EVENT_BOX (event_box),
- fg_color != NULL || bg_color != NULL);
-
- gtk_widget_modify_fg (label, GTK_STATE_NORMAL, fg_color);
- gtk_widget_modify_fg (label, GTK_STATE_ACTIVE, fg_color);
-
- #if GTK_CHECK_VERSION (3, 0, 0)
- gtk_widget_modify_bg (event_box, GTK_STATE_NORMAL, bg_color);
- gtk_widget_modify_bg (event_box, GTK_STATE_ACTIVE, bg_color);
- #else
- gtk_widget_modify_bg (box, GTK_STATE_NORMAL, bg_color);
- gtk_widget_modify_bg (box, GTK_STATE_ACTIVE, bg_color);
- #endif
}
diff --git a/midori/midori-view.h b/midori/midori-view.h
index 2c90eb74..81e33848 100644
--- a/midori/midori-view.h
+++ b/midori/midori-view.h
@@ -195,7 +195,8 @@ midori_view_can_view_source (MidoriView* view);
gchar*
midori_view_save_source (MidoriView* view,
const gchar* uri,
- const gchar* outfile);
+ const gchar* outfile,
+ gboolean use_dom);
void
midori_view_search_text (MidoriView* view,
diff --git a/midori/midori-websettings.c b/midori/midori-websettings.c
index 46e93a5b..a1e47c39 100644
--- a/midori/midori-websettings.c
+++ b/midori/midori-websettings.c
@@ -64,6 +64,7 @@ struct _MidoriWebSettings
gchar* user_stylesheet_uri;
gchar* user_stylesheet_uri_cached;
GHashTable* user_stylesheets;
+ gboolean print_without_dialog;
};
struct _MidoriWebSettingsClass
@@ -99,6 +100,7 @@ enum
PROP_ENABLE_DNS_PREFETCHING,
PROP_ENFORCE_FONT_FAMILY,
PROP_USER_STYLESHEET_URI,
+ PROP_PRINT_WITHOUT_DIALOG,
};
GType
@@ -492,6 +494,16 @@ midori_web_settings_class_init (MidoriWebSettingsClass* class)
flags));
g_object_class_install_property (gobject_class,
+ PROP_PRINT_WITHOUT_DIALOG,
+ g_param_spec_boolean (
+ "print-without-dialog",
+ "Print without dialog",
+ "Print without showing a dialog box",
+ FALSE,
+ flags));
+
+
+ g_object_class_install_property (gobject_class,
PROP_USER_STYLESHEET_URI,
g_param_spec_string (
"user-stylesheet-uri",
@@ -870,11 +882,9 @@ sokoke_add_quality_value (const gchar *str,
static gchar *
sokoke_accept_languages (const gchar* const * lang_names)
{
- GArray *langs_garray = NULL;
+ GString* langs = NULL;
char *cur_lang = NULL;
char *prev_lang = NULL;
- char **langs_array;
- char *langs_str;
float delta;
int i, n_lang_names;
@@ -883,7 +893,7 @@ sokoke_accept_languages (const gchar* const * lang_names)
delta = 0.999 / (n_lang_names - 1);
/* Build the array of languages */
- langs_garray = g_array_new (TRUE, FALSE, sizeof (char*));
+ langs = g_string_sized_new (n_lang_names);
for (i = 0; lang_names[i] != NULL; i++)
{
cur_lang = sokoke_posix_lang_to_rfc2616 (lang_names[i]);
@@ -901,21 +911,17 @@ sokoke_accept_languages (const gchar* const * lang_names)
/* Add the quality value and append it */
qv_lang = sokoke_add_quality_value (cur_lang, 1 - i * delta);
- g_array_append_val (langs_garray, qv_lang);
+ if (langs->len > 0)
+ g_string_append_c (langs, ',');
+ g_string_append (langs, qv_lang);
}
}
/* Fallback: add "en" if list is empty */
- if (langs_garray->len == 0)
- {
- gchar* fallback = g_strdup ("en");
- g_array_append_val (langs_garray, fallback);
- }
-
- langs_array = (char **) g_array_free (langs_garray, FALSE);
- langs_str = g_strjoinv (", ", langs_array);
+ if (langs->len == 0)
+ g_string_append (langs, "en");
- return langs_str;
+ return g_string_free (langs, FALSE);
}
@@ -1023,7 +1029,7 @@ midori_web_settings_set_property (GObject* object,
case PROP_PROXY_TYPE:
web_settings->proxy_type = g_value_get_enum (value);
- break;
+ break;
case PROP_IDENTIFY_AS:
web_settings->identify_as = g_value_get_enum (value);
if (web_settings->identify_as != MIDORI_IDENT_CUSTOM)
@@ -1107,6 +1113,9 @@ midori_web_settings_set_property (GObject* object,
midori_web_settings_process_stylesheets (web_settings, new_len - old_len);
}
break;
+ case PROP_PRINT_WITHOUT_DIALOG:
+ web_settings->print_without_dialog = g_value_get_boolean(value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1223,6 +1232,9 @@ midori_web_settings_get_property (GObject* object,
WEB_SETTINGS_STRING ("user-stylesheet-uri")));
#endif
break;
+ case PROP_PRINT_WITHOUT_DIALOG:
+ g_value_set_boolean (value, web_settings->print_without_dialog);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1527,7 +1539,7 @@ midori_settings_save_to_file (MidoriWebSettings* settings,
}
else if (type == G_TYPE_PARAM_UINT)
{
- gint integer;
+ guint integer;
g_object_get (settings, property, &integer, NULL);
if (integer != G_PARAM_SPEC_UINT (pspec)->default_value)
g_key_file_set_integer (key_file, "settings", property, integer);
@@ -1587,12 +1599,12 @@ midori_settings_save_to_file (MidoriWebSettings* settings,
KATZE_ARRAY_FOREACH_ITEM (extension, extensions)
if (midori_extension_is_active (extension))
{
- const gchar* filename = g_object_get_data (G_OBJECT (extension), "filename");
- g_return_val_if_fail (filename != NULL, FALSE);
- if (filename && strchr (filename, '/'))
- g_warning ("%s: %s unexpected /", G_STRFUNC, filename);
+ const gchar* extension_filename = g_object_get_data (G_OBJECT (extension), "filename");
+ g_return_val_if_fail (extension_filename != NULL, FALSE);
+ if (extension_filename && strchr (extension_filename, '/'))
+ g_warning ("%s: %s unexpected /", G_STRFUNC, extension_filename);
gchar* key = katze_object_get_string (extension, "key");
- gchar* subname = key ? g_strdup_printf ("%s/%s", filename, key) : g_strdup (filename);
+ gchar* subname = key ? g_strdup_printf ("%s/%s", extension_filename, key) : g_strdup (extension_filename);
g_key_file_set_boolean (key_file, "extensions", subname, TRUE);
g_free (key);
g_free (subname);
diff --git a/midori/midori.vapi b/midori/midori.vapi
index fdb53051..da71b207 100644
--- a/midori/midori.vapi
+++ b/midori/midori.vapi
@@ -31,6 +31,8 @@ namespace Midori {
public static void set_instance_is_running (bool is_running);
public Browser create_browser ();
public GLib.List<weak Browser> get_browsers ();
+ public void send_notification (string title, string message);
+ public bool send_command ([CCode (array_length = false)] string[] command);
[NoAccessorMethod]
public string name { get; set; }
@@ -49,13 +51,13 @@ namespace Midori {
[NoAccessorMethod]
public Katze.Array browsers { get; }
public Browser? browser { get; }
+ public bool crashed { get; }
[HasEmitter]
public signal void add_browser (Browser browser);
public signal void remove_browser (Browser browser);
[HasEmitter]
public signal void quit ();
- public void send_notification (string title, string message);
}
[CCode (cheader_filename = "midori/midori.h")]
@@ -197,7 +199,6 @@ namespace Midori {
public string title { get; }
public Gdk.Pixbuf icon { get; }
- public bool minimized { get; }
public float zoom_level { get; }
public Katze.Array news_feeds { get; }
[NoAccessorMethod]
@@ -207,7 +208,7 @@ namespace Midori {
[HasEmitter]
public signal bool download_requested (WebKit.Download download);
public signal bool about_content (string uri);
-
+ public signal void new_view (Midori.View new_view, Midori.NewView where, bool user_initiated);
}
[CCode (cheader_filename = "midori/midori.h")]
@@ -256,6 +257,7 @@ namespace Midori {
[CCode (cheader_filename = "midori/sokoke.h", lower_case_cprefix = "sokoke_")]
namespace Sokoke {
+ public static string magic_uri (string uri, bool allow_search, bool allow_relative);
public static uint gtk_action_count_modifiers (Gtk.Action action);
#if HAVE_WIN32
public static string get_win32_desktop_lnk_path_for_filename (string filename);
diff --git a/midori/sokoke.c b/midori/sokoke.c
index dc0f2815..03cc7a42 100644
--- a/midori/sokoke.c
+++ b/midori/sokoke.c
@@ -127,6 +127,7 @@ sokoke_message_dialog (GtkMessageType message_type,
}
+#ifndef G_OS_WIN32
static void
sokoke_open_with_response_cb (GtkWidget* dialog,
gint response,
@@ -140,6 +141,7 @@ sokoke_open_with_response_cb (GtkWidget* dialog,
}
gtk_widget_destroy (dialog);
}
+#endif
GAppInfo*
sokoke_default_for_uri (const gchar* uri,
@@ -859,12 +861,7 @@ sokoke_prefetch_uri (MidoriWebSettings* settings,
GCallback callback,
gpointer user_data)
{
- #define MAXHOSTS 50
- static gchar* hosts = NULL;
- static gint host_count = G_MAXINT;
gchar* hostname;
-
-
#ifndef HAVE_WEBKIT2
SoupURI* soup_uri;
SoupSession* session = webkit_get_default_session ();
@@ -891,6 +888,10 @@ sokoke_prefetch_uri (MidoriWebSettings* settings,
g_free (hostname);
return FALSE;
#else
+ #define MAXHOSTS 50
+ static gchar* hosts = NULL;
+ static gint host_count = G_MAXINT;
+
if (!hosts ||
!g_regex_match_simple (hostname, hosts,
G_REGEX_CASELESS, G_REGEX_MATCH_NOTEMPTY))
@@ -1093,6 +1094,8 @@ sokoke_create_win32_desktop_lnk (gchar* prefix, gchar* filename, gchar* uri)
launcher_type = "-a";
else if (g_str_has_suffix (prefix, " -c "))
launcher_type = "-c";
+ else
+ g_assert_not_reached ();
argument = g_strdup_printf ("%s \"%s\"", launcher_type, uri);
diff --git a/midori/wscript_build b/midori/wscript_build
deleted file mode 100644
index be4d1fc9..00000000
--- a/midori/wscript_build
+++ /dev/null
@@ -1,58 +0,0 @@
-#! /usr/bin/env python
-# WAF build script for midori
-# This file is licensed under the terms of the expat license, see the file EXPAT.
-
-import Options
-import platform
-import os
-
-progressive = True
-libs = 'M UNIQUE LIBSOUP GMODULE GTHREAD LIBIDN GIO GTK SQLITE ' \
- 'LIBNOTIFY WEBKIT JAVASCRIPTCOREGTK LIBXML X11 XSS WS2_32 ' \
- 'GCR GRANITE ZEITGEIST OLE32 UUID '
-
-if Options.commands['build'] or Options.commands['check']:
- blddir = str (bld.bldnode)[6:] # dir:// + absolute path
- duplicate_vapi = blddir + '/default/midori/midori-core.vapi'
- if os.path.exists (duplicate_vapi):
- os.remove (duplicate_vapi)
-
-if progressive:
- obj = bld.new_task_gen ('cc', 'staticlib')
- obj.target = 'midori-core'
- obj.find_sources_in_dirs ('../katze . ../panels ../toolbars', exts=['.vala'])
- obj.env.append_value ('CCFLAGS', '-w')
- obj.uselib = libs
- obj.vapi_dirs = '../midori ../katze'
- obj.packages = 'glib-2.0 gmodule-2.0 gio-2.0 libsoup-2.4 posix sqlite3'
- if bld.env['HAVE_WEBKIT2']:
- obj.packages += ' webkit2gtk-3.0'
- else:
- obj.packages += ' webkitgtk-3.0'
- if bld.env['HAVE_GTK3']:
- obj.packages += ' gtk+-3.0'
- else:
- obj.packages += ' gtk+-2.0'
- if bld.env['HAVE_GRANITE']:
- obj.packages += ' granite'
- obj.install_path = None
- bld.add_group ()
-
- obj = bld.new_task_gen ('cc', 'staticlib')
- obj.target = 'midori-c'
- obj.includes = '.. ../katze . ../toolbars'
- obj.find_sources_in_dirs ('../katze . ../panels ../toolbars', exts=['.c'], excludes=['main.c'])
- obj.uselib = libs
- obj.uselib_local = 'midori-core'
- obj.add_marshal_file ('marshal.list', 'midori_cclosure_marshal')
- obj.install_path = None
- bld.add_group ()
-
- obj = bld.new_task_gen ('cc', 'program')
- obj.target = 'midori'
- obj.includes = '.. ../katze . ../panels'
- obj.source = './main.c'
- obj.uselib = libs
- obj.uselib_local = 'midori-c'
- if bld.env['WINRC']:
- obj.source += ' ../data/midori.rc'
diff --git a/panels/midori-bookmarks.c b/panels/midori-bookmarks.c
index 63c5f79b..91e27e5d 100644
--- a/panels/midori-bookmarks.c
+++ b/panels/midori-bookmarks.c
@@ -366,7 +366,6 @@ static void
midori_bookmarks_add_item (KatzeItem* item,
MidoriBookmarks* bookmarks)
{
- gint64 id = katze_item_get_meta_integer (item, "id");
gint64 parentid = katze_item_get_meta_integer (item, "parentid");
GtkTreeModel* model = gtk_tree_view_get_model (GTK_TREE_VIEW (bookmarks->treeview));
GtkTreeIter iter;
@@ -649,9 +648,6 @@ static void
midori_bookmarks_statusbar_update (MidoriBookmarks *bookmarks)
{
gchar* text = NULL;
- GtkTreeModel* model;
- GtkTreeIter iter;
- gboolean selected;
if (bookmarks->hovering_item)
{
diff --git a/panels/midori-history.c b/panels/midori-history.c
index c3f1c340..5d6f2e65 100644
--- a/panels/midori-history.c
+++ b/panels/midori-history.c
@@ -662,7 +662,6 @@ midori_history_open_in_tab_activate_cb (GtkWidget* menuitem,
{
KatzeItem* item;
const gchar* uri;
- guint n;
item = (KatzeItem*)g_object_get_data (G_OBJECT (menuitem), "KatzeItem");
if (KATZE_ITEM_IS_FOLDER (item))
diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt
index 7af351a4..74202341 100644
--- a/po/CMakeLists.txt
+++ b/po/CMakeLists.txt
@@ -9,12 +9,16 @@ if (GETTEXT_FOUND)
endif ()
message(STATUS "gettext found: ${LANGUAGES}")
string(REPLACE " " ";" LANGUAGES ${LANGUAGES})
- foreach(LANG ${LANGUAGES})
- GETTEXT_PROCESS_PO_FILES(${LANG} ALL)
- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${LANG}.gmo"
- DESTINATION "${CMAKE_INSTALL_FULL_LOCALEDIR}/${LANG}/LC_MESSAGES"
- RENAME "${GETTEXT_PACKAGE}.mo")
- endforeach ()
+ if ("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}" VERSION_LESS "2.8.8")
+ GETTEXT_CREATE_TRANSLATIONS("${CMAKE_CURRENT_SOURCE_DIR}/midori.pot" ALL ${POTFILES})
+ else()
+ foreach(LANG ${LANGUAGES})
+ GETTEXT_PROCESS_PO_FILES(${LANG} ALL PO_FILES ${LANG}.po)
+ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${LANG}.gmo"
+ DESTINATION "${CMAKE_INSTALL_FULL_LOCALEDIR}/${LANG}/LC_MESSAGES"
+ RENAME "${GETTEXT_PACKAGE}.mo")
+ endforeach ()
+ endif()
else ()
message(STATUS "gettext not found")
endif ()
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 34c326de..b1cfc8aa 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -5,6 +5,7 @@ data/midori-private.desktop.in
midori/main.c
midori/midori-app.c
midori/midori-array.c
+midori/midori-bookmarksdatabase.vala
midori/midori-browser.c
midori/midori-database.vala
midori/midori-extension.c
@@ -13,6 +14,7 @@ midori/midori-panel.c
midori/midori-settings.vala
midori/midori-websettings.c
midori/midori-tab.vala
+midori/midori-notebook.vala
midori/midori-view.c
midori/midori-download.vala
midori/midori-speeddial.vala
@@ -27,7 +29,6 @@ panels/midori-bookmarks.c
panels/midori-extensions.c
panels/midori-history.c
katze/katze-http-auth.c
-katze/katze-throbber.c
katze/katze-utils.c
katze/katze-item.c
katze/katze-array.c
@@ -89,3 +90,4 @@ extensions/cookie-permissions/main.c
extensions/apps.vala
extensions/transfers.vala
extensions/tabby.vala
+extensions/flummi.vala
diff --git a/po/ar.po b/po/ar.po
index 2f66d9e9..e7830bd4 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -8,16 +8,16 @@ msgstr ""
"Project-Id-Version: midori\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-08-30 07:51+0000\n"
-"Last-Translator: WebKit Team <Unknown>\n"
+"PO-Revision-Date: 2014-01-02 13:18+0000\n"
+"Last-Translator: Mohammed Shammout <fdsmohammed@gmail.com>\n"
"Language-Team: Arabic <herr.linux88@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
-"X-Launchpad-Export-Date: 2013-08-31 04:45+0000\n"
-"X-Generator: Launchpad (build 16750)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:16+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"X-Poedit-Country: MOROCCO\n"
"Language: ar\n"
"X-Poedit-Language: Arabic\n"
@@ -25,19 +25,19 @@ msgstr ""
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
msgid "Midori"
-msgstr "ميدوري"
+msgstr ""
#: ../data/midori.desktop.in.h:2
msgid "Web Browser"
-msgstr "متصفح الوب"
+msgstr "مُتصفح شبكه المعلومات"
#: ../data/midori.desktop.in.h:3
msgid "Midori Web Browser"
-msgstr "مستعرض الويب ميدوري"
+msgstr "ميدورى مُتصفح شبكه المعلومات"
#: ../data/midori.desktop.in.h:4
msgid "Browse the Web"
-msgstr "تصفّح الإنترنت"
+msgstr "تصفح شبكه المعلومات"
#: ../data/midori.desktop.in.h:5
msgid "Internet;WWW;Explorer"
@@ -45,19 +45,19 @@ msgstr "شبكة الإنترنت؛WWW؛إكسبلورر"
#: ../data/midori.desktop.in.h:6 ../midori/midori-browser.c:1425
msgid "New Tab"
-msgstr "تبويب جديد"
+msgstr "لسان جديد"
#: ../data/midori.desktop.in.h:7 ../midori/midori-browser.c:1422
msgid "New Window"
-msgstr "نافذة جديدة"
+msgstr "نافذه جديده"
#: ../data/midori.desktop.in.h:8
msgid "New Private Browsing Window"
-msgstr "نافذة التصفح الخاص الجديدة"
+msgstr "نافذه تصفح خاص جديده"
#: ../data/midori-private.desktop.in.h:1
msgid "Midori Private Browsing"
-msgstr "متصفح ميدوري الخاص"
+msgstr "مُتصفح ميدورى الخاص"
#: ../data/midori-private.desktop.in.h:2 ../midori/midori-view.c:4106
msgid "Private Browsing"
@@ -65,12 +65,12 @@ msgstr "التصفح الخاص"
#: ../data/midori-private.desktop.in.h:3
msgid "Open a new private browsing window"
-msgstr "فتح نافذة تصفح خاصة الجديدة"
+msgstr "فتح نافذه تصفح خاص جديده"
#: ../midori/main.c:52
#, c-format
msgid "Snapshot saved to: %s\n"
-msgstr "حفظ لقطة في : %s\n"
+msgstr "حُفظت اللقطه فى : %s\n"
#: ../midori/main.c:79
msgid "Run ADDRESS as a web application"
@@ -78,31 +78,32 @@ msgstr "شغل العنوان كتطبيق وب"
#: ../midori/main.c:79
msgid "ADDRESS"
-msgstr "عنوان"
+msgstr "العنوان"
#: ../midori/main.c:81
msgid "Use FOLDER as configuration folder"
-msgstr "إستعمل المجلد كمجلد إعدادات"
+msgstr "إستعمل المُجلد كـ مُجلد إعدادات"
#: ../midori/main.c:81
msgid "FOLDER"
-msgstr "مجلد"
+msgstr "المُجلد"
#: ../midori/main.c:83
msgid "Private browsing, no changes are saved"
-msgstr "التصفح الخاص ، لا يتم حفظ أية تغييرات"
+msgstr "فى التصفح الخاص ، لا تُحفظ اى تغيرات"
#: ../midori/main.c:86
msgid "Portable mode, all runtime files are stored in one place"
-msgstr "وضع المحمولة، كل ملفات وقت التشغيل يتم تخزينها في مكان واحد"
+msgstr ""
+"فى وضع الجولنه ، جميع الملفات التى تنشئ فى وقت التشغيل تُخزن فى مكان واحد"
#: ../midori/main.c:89
msgid "Plain GTK+ window with WebKit, akin to GtkLauncher"
-msgstr "نافذة GTK+ خالية مع أدوات، أقرب إلى مطلق GTK"
+msgstr ""
#: ../midori/main.c:91
msgid "Show a diagnostic dialog"
-msgstr "عرض حوار التشخيص"
+msgstr "إظهار صندوق التشخيص"
#: ../midori/main.c:93
msgid "Run within gdb and save a backtrace on crash"
@@ -126,11 +127,11 @@ msgstr "قائمة الأوامر المتوفرة لتنفيذ مع -e/ --execu
#: ../midori/main.c:103
msgid "Display program version"
-msgstr "إظهار نسخة البرنامج"
+msgstr "إظهر إصدار البرنامج"
#: ../midori/main.c:105
msgid "Addresses"
-msgstr "عناوين"
+msgstr "العناوين"
#: ../midori/main.c:107
msgid "Block URIs according to regular expression PATTERN"
@@ -297,11 +298,11 @@ msgstr "حرر المجلد"
#: ../midori/midori-browser.c:951
msgid "New Bookmark"
-msgstr ""
+msgstr "مرجعية جديدة"
#: ../midori/midori-browser.c:951
msgid "Edit Bookmark"
-msgstr ""
+msgstr "تعديل الإشارة"
#: ../midori/midori-browser.c:973
msgid "Type a name for this bookmark, and choose where to keep it."
@@ -527,9 +528,12 @@ msgstr ""
"\n"
"Launchpad Contributions:\n"
" Abdallah Ali Hassan https://launchpad.net/~abdallah-ali-hassan\n"
+" Fathallah Wael https://launchpad.net/~fathallahwael80\n"
" Julian James https://launchpad.net/~reallyhungryhippo\n"
" Karim Oulad Chalha https://launchpad.net/~herr-linux\n"
+" Mohammed Shammout https://launchpad.net/~fdsmohammed\n"
" WebKit Team https://launchpad.net/~webkit-team\n"
+" abdXelrhman https://launchpad.net/~popo49-abdo\n"
" محمد الحرقان https://launchpad.net/~malham1-gmail"
#: ../midori/midori-browser.c:5243
@@ -881,7 +885,7 @@ msgstr "عرض العلامات المحفوظة"
#: ../midori/midori-browser.c:6137
msgid "_Tabs"
-msgstr ""
+msgstr "_التبويبات"
#: ../midori/midori-browser.c:6139
msgid "Show a list of all open tabs"
@@ -1001,7 +1005,7 @@ msgstr "أظهر أخر تبويب بدون تحميل"
#: ../midori/midori-websettings.c:129
msgid "Show Blank Page"
-msgstr ""
+msgstr "أظهر صفحة فارغة"
#: ../midori/midori-websettings.c:131
msgid "Show default Search Engine"
@@ -1163,7 +1167,7 @@ msgstr "تأكد من ان إعدادات الشبكة صحبحة"
#: ../midori/midori-view.c:1261
msgid "Try Again"
-msgstr ""
+msgstr "أعِد المحاولة"
#: ../midori/midori-view.c:1386
#, c-format
@@ -1869,7 +1873,7 @@ msgstr "لا يمكن تشغيل البرنامج الخارجي."
#: ../midori/sokoke.c:552
msgid "Invalid URI"
-msgstr ""
+msgstr "عنوان غير صحيح"
#. i18n: A panel at the bottom, to search text in pages
#: ../toolbars/midori-findbar.c:233
@@ -1917,7 +1921,7 @@ msgstr[1] ""
#: ../panels/midori-bookmarks.c:534
#, c-format
msgid "Empty folder"
-msgstr ""
+msgstr "مجلد فارغ"
#. i18n: Folder containing [[n] folder(s)] and no bookmark
#: ../panels/midori-bookmarks.c:537
@@ -1953,7 +1957,7 @@ msgstr ""
#: ../panels/midori-bookmarks.c:575
#, c-format
msgid "%s and %s"
-msgstr ""
+msgstr "%s و %s"
#: ../panels/midori-bookmarks.c:627
#, c-format
@@ -2928,7 +2932,7 @@ msgstr ""
#: ../extensions/cookie-permissions/cookie-permission-manager-preferences-window.c:707
#: ../extensions/cookie-permissions/cookie-permission-manager.c:1112
msgid "Accept"
-msgstr ""
+msgstr "موافق"
#: ../extensions/cookie-permissions/cookie-permission-manager-preferences-window.c:250
#: ../extensions/cookie-permissions/cookie-permission-manager-preferences-window.c:709
@@ -2940,7 +2944,7 @@ msgstr ""
#: ../extensions/cookie-permissions/cookie-permission-manager-preferences-window.c:711
#: ../extensions/cookie-permissions/cookie-permission-manager.c:1114
msgid "Block"
-msgstr ""
+msgstr "حظر"
#: ../extensions/cookie-permissions/cookie-permission-manager-preferences-window.c:300
#: ../extensions/cookie-permissions/cookie-permission-manager.c:151
@@ -2995,11 +2999,11 @@ msgstr ""
#: ../extensions/cookie-permissions/cookie-permission-manager-preferences-window.c:740
#: ../extensions/cookie-permissions/cookie-permission-manager.c:552
msgid "Domain"
-msgstr ""
+msgstr "النطاق"
#: ../extensions/cookie-permissions/cookie-permission-manager-preferences-window.c:748
msgid "Policy"
-msgstr ""
+msgstr "سياسة"
#: ../extensions/cookie-permissions/cookie-permission-manager-preferences-window.c:777
msgid "Delete _all"
@@ -3022,7 +3026,7 @@ msgstr ""
#: ../extensions/cookie-permissions/cookie-permission-manager.c:100
msgid "Reason"
-msgstr ""
+msgstr "السبب"
#: ../extensions/cookie-permissions/cookie-permission-manager.c:140
#, c-format
@@ -3067,7 +3071,7 @@ msgstr ""
#: ../extensions/cookie-permissions/cookie-permission-manager.c:527
msgid "_Accept"
-msgstr ""
+msgstr "_قبول"
#: ../extensions/cookie-permissions/cookie-permission-manager.c:528
msgid "Accept for this _session"
@@ -3083,11 +3087,11 @@ msgstr ""
#: ../extensions/cookie-permissions/cookie-permission-manager.c:559
msgid "Path"
-msgstr ""
+msgstr "المسار"
#: ../extensions/cookie-permissions/cookie-permission-manager.c:573
msgid "Value"
-msgstr ""
+msgstr "القيمة"
#: ../extensions/cookie-permissions/cookie-permission-manager.c:584
msgid "Expire date"
@@ -3137,7 +3141,7 @@ msgstr ""
#: ../extensions/cookie-permissions/cookie-permission-manager.c:1111
msgid "Undetermined"
-msgstr ""
+msgstr "غير محدّد"
#: ../extensions/cookie-permissions/main.c:62
msgid "Cookie Security Manager"
diff --git a/po/ast.po b/po/ast.po
index 471d8e48..58d38215 100644
--- a/po/ast.po
+++ b/po/ast.po
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:20+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:16+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/be.po b/po/be.po
index 2a635978..eee8dd0f 100644
--- a/po/be.po
+++ b/po/be.po
@@ -16,8 +16,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:21+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:16+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/bg.po b/po/bg.po
index 3ab205d2..cc0f7e2f 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -16,8 +16,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Launchpad-Export-Date: 2013-08-06 04:46+0000\n"
-"X-Generator: Launchpad (build 16718)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:16+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: bg\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
diff --git a/po/bs.po b/po/bs.po
index aebe76fe..3b268fe8 100644
--- a/po/bs.po
+++ b/po/bs.po
@@ -16,8 +16,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:21+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:16+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/ca.po b/po/ca.po
index 8e23dd36..ffeed116 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -11,15 +11,15 @@ msgstr ""
"Project-Id-Version: midori\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-07-13 09:34+0000\n"
+"PO-Revision-Date: 2013-11-25 10:06+0000\n"
"Last-Translator: WebKit Team <Unknown>\n"
"Language-Team: Catalan\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:21+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:16+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: Catalan\n"
"X-Poedit-Language: Catalan\n"
"X-Poedit-SourceCharset: utf-8\n"
@@ -39,7 +39,7 @@ msgstr "Navegador web Midori"
#: ../data/midori.desktop.in.h:4
msgid "Browse the Web"
-msgstr "Navega la web"
+msgstr "Navegueu pel web"
#: ../data/midori.desktop.in.h:5
msgid "Internet;WWW;Explorer"
@@ -47,11 +47,11 @@ msgstr "Internet;WWW;Explorador"
#: ../data/midori.desktop.in.h:6 ../midori/midori-browser.c:1425
msgid "New Tab"
-msgstr "Nova pestanya"
+msgstr "Pestanya nova"
#: ../data/midori.desktop.in.h:7 ../midori/midori-browser.c:1422
msgid "New Window"
-msgstr "Nova finestra"
+msgstr "Finestra nova"
#: ../data/midori.desktop.in.h:8
msgid "New Private Browsing Window"
@@ -76,7 +76,7 @@ msgstr "S'ha desat una captura a: %s\n"
#: ../midori/main.c:79
msgid "Run ADDRESS as a web application"
-msgstr "Executa ADREÇA com una aplicació web"
+msgstr "Executa ADREÇA com a una aplicació web"
#: ../midori/main.c:79
msgid "ADDRESS"
@@ -97,6 +97,7 @@ msgstr "Navegació privada, els canvis no es desaran"
#: ../midori/main.c:86
msgid "Portable mode, all runtime files are stored in one place"
msgstr ""
+"Modalitat portable, tots els fitxers executables es desen a un sol lloc"
#: ../midori/main.c:89
msgid "Plain GTK+ window with WebKit, akin to GtkLauncher"
@@ -104,7 +105,7 @@ msgstr ""
#: ../midori/main.c:91
msgid "Show a diagnostic dialog"
-msgstr "Mostra el diàleg de diagnosis"
+msgstr "Mostra el diàleg de diagnòstic"
#: ../midori/main.c:93
msgid "Run within gdb and save a backtrace on crash"
@@ -116,15 +117,15 @@ msgstr "Executa el fitxer especificat com a javascript"
#: ../midori/main.c:97
msgid "Take a snapshot of the specified URI"
-msgstr "Fes una captura de la ubicació especificada"
+msgstr "Fes una captura de l'URI especificat"
#: ../midori/main.c:99
msgid "Execute the specified command"
-msgstr "Executar la comanda especificada"
+msgstr "Executa l'ordre especificada"
#: ../midori/main.c:101
msgid "List available commands to execute with -e/ --execute"
-msgstr "Llista de comandes disponibles per a executar amb -e/--execute"
+msgstr "Llista d'ordres disponibles per executar amb -e/--execute"
#: ../midori/main.c:103
msgid "Display program version"
@@ -136,7 +137,7 @@ msgstr "Adreces"
#: ../midori/main.c:107
msgid "Block URIs according to regular expression PATTERN"
-msgstr "Bloquejar URIs segons l'expressió regular PATRÓ"
+msgstr "Bloqueja els URIs segons l'expressió regular PATRÓ"
#: ../midori/main.c:107
msgid "PATTERN"
@@ -145,7 +146,7 @@ msgstr "PATRÓ"
#. i18n: CLI: Close tabs, clear private data, open starting page
#: ../midori/main.c:111
msgid "Reset Midori after SECONDS seconds of inactivity"
-msgstr "Reiniciar Midori després de SEGONS d'activitat"
+msgstr "Reinicia el Midori després de SEGONS segons d'activitat"
#: ../midori/main.c:111
msgid "SECONDS"
@@ -153,7 +154,7 @@ msgstr "SEGONS"
#: ../midori/main.c:136
msgid "Error: \"gdb\" can't be found\n"
-msgstr ""
+msgstr "Error: no s'ha pogut trobar «gdb»\n"
#: ../midori/main.c:162
msgid "Please report comments, suggestions and bugs to:"
@@ -161,7 +162,7 @@ msgstr "Envieu comentaris, suggeriments i informes d'error a:"
#: ../midori/main.c:164
msgid "Check for new versions at:"
-msgstr "Comprova si hi ha noves versions a:"
+msgstr "Comproveu si hi ha versions noves a:"
#: ../midori/main.c:358
msgid "An unknown error occured"
@@ -173,7 +174,7 @@ msgstr "_Adreces d'interès"
#: ../midori/midori-app.c:1341
msgid "Add Boo_kmark"
-msgstr "Afegeix adreça d'_interès"
+msgstr "Afegeix una adreça d'_interès"
#: ../midori/midori-app.c:1342
msgid "_Extensions"
@@ -194,7 +195,7 @@ msgstr "E_stils personals"
#: ../midori/midori-app.c:1346
msgid "New _Tab"
-msgstr "Nova _pestanya"
+msgstr "Pes_tanya nova"
#: ../midori/midori-app.c:1347
msgid "_Transfers"
@@ -202,7 +203,7 @@ msgstr "_Transferències"
#: ../midori/midori-app.c:1348
msgid "Netscape p_lugins"
-msgstr "_Connectors de Netscape"
+msgstr "_Connectors del Netscape"
#: ../midori/midori-app.c:1349
msgid "_Closed Tabs"
@@ -210,11 +211,11 @@ msgstr "Pestanyes _tancades"
#: ../midori/midori-app.c:1350 ../midori/midori-browser.c:5245
msgid "New _Window"
-msgstr "Nova _finestra"
+msgstr "_Finestra nova"
#: ../midori/midori-app.c:1351
msgid "New _Folder"
-msgstr "Nova _carpeta"
+msgstr "_Carpeta nova"
#: ../midori/midori-app.c:1400 ../midori/midori-app.c:1403
#: ../midori/midori-app.c:1406
@@ -228,7 +229,7 @@ msgstr "No s'ha trobat el fitxer."
#: ../midori/midori-array.c:574 ../midori/midori-array.c:613
#: ../midori/midori-array.c:637 ../midori/midori-array.c:647
msgid "Malformed document."
-msgstr "Document format erròniament."
+msgstr "El document està format erròniament."
#: ../midori/midori-array.c:656
msgid "Unrecognized bookmark format."
@@ -246,7 +247,7 @@ msgstr "Avança al apartat següent de la pàgina"
#: ../midori/midori-browser.c:345
msgid "Web Search…"
-msgstr ""
+msgstr "Cerca en el web…"
#: ../midori/midori-browser.c:449 ../midori/midori-browser.c:5326
#: ../midori/midori-browser.c:5335
@@ -266,7 +267,7 @@ msgstr "No s'ha pogut actualitzar el títol: %s\n"
#: ../midori/midori-browser.c:632 ../midori/midori-websettings.c:1449
#, c-format
msgid "Value '%s' is invalid for %s"
-msgstr "El valor «%s» no és vàlid per %s"
+msgstr "El valor «%s» no és vàlid per a %s"
#: ../midori/midori-browser.c:581 ../midori/midori-browser.c:652
#: ../midori/midori-browser.c:6890
@@ -291,27 +292,27 @@ msgstr "Adreces d'interès"
#: ../midori/midori-browser.c:949
msgid "New Folder"
-msgstr ""
+msgstr "Carpeta nova"
#: ../midori/midori-browser.c:949
msgid "Edit Folder"
-msgstr ""
+msgstr "Edita la carpeta"
#: ../midori/midori-browser.c:951
msgid "New Bookmark"
-msgstr ""
+msgstr "Adreça d'interès nova"
#: ../midori/midori-browser.c:951
msgid "Edit Bookmark"
-msgstr ""
+msgstr "Edita l'adreça d'interès"
#: ../midori/midori-browser.c:973
msgid "Type a name for this bookmark, and choose where to keep it."
-msgstr ""
+msgstr "Escriviu un nom per aquesta adreça d'interès i trieu on desar-la."
#: ../midori/midori-browser.c:975
msgid "Type a name for this folder, and choose where to keep it."
-msgstr ""
+msgstr "Escriviu un nom per aquesta carpeta i trieu on desar-la."
#: ../midori/midori-browser.c:1030
msgid "Add to _Speed Dial"
@@ -319,15 +320,15 @@ msgstr "Afegeix al _velocímetre"
#: ../midori/midori-browser.c:1039
msgid "Show in Bookmarks _Bar"
-msgstr ""
+msgstr "Mostrar la _barra de les adreces d'interès"
#: ../midori/midori-browser.c:1047
msgid "Run as _web application"
-msgstr "Executa com una aplicació _web"
+msgstr "Executa com a una aplicació _web"
#: ../midori/midori-browser.c:1160 ../midori/midori-browser.c:4523
msgid "Save file as"
-msgstr "Anomena i desa"
+msgstr "Anomena i desa el fitxer"
#: ../midori/midori-browser.c:1170
msgid "Save associated _resources"
@@ -335,7 +336,7 @@ msgstr "Desa els _recursos associats"
#: ../midori/midori-browser.c:1422
msgid "A new window has been opened"
-msgstr "Una nova finestra s'ha obert"
+msgstr "S'ha obert una finestra nova"
#: ../midori/midori-browser.c:1425
msgid "A new tab has been opened"
@@ -347,11 +348,12 @@ msgstr "S'ha produït un error al obrir la imatge!"
#: ../midori/midori-browser.c:1444
msgid "Can not open selected image in a default viewer."
-msgstr "No s'ha pogut obrir la imatge seleccionada en el visor per defecte."
+msgstr ""
+"No s'ha pogut obrir la imatge seleccionada en el visor predeterminat."
#: ../midori/midori-browser.c:1450
msgid "Error downloading the image!"
-msgstr "Error en descarregar la imatge!"
+msgstr "S'ha produït un error en baixar la imatge."
#: ../midori/midori-browser.c:1451
msgid "Can not download selected image."
@@ -373,16 +375,16 @@ msgid ""
"Aggregator. Next time you click the news feed icon, it will be added "
"automatically."
msgstr ""
-"Per a usar l'URI que hi ha a dalt, obriu un agregador de notícies. "
-"Normalment hi ha un botó de \"Nova suscripció\", \"Noves notícies\" o "
-"similar.\n"
-"Alternativament, aneu a Preferències/Aplicacions a Midori i seleccioneu "
-"agregador de notícies. El proper cop que cliqueu a la icona de les notícies, "
-"s'agregarà automàticament."
+"Per utilitzar l'URI que hi ha a dalt, obriu un agregador de notícies. "
+"Normalment hi ha un botó de «Nova subscripció», «Noves notícies» o "
+"similars.\n"
+"Alternativament, aneu a «Preferències»/«Aplicacions» al Midori i seleccioneu "
+"un agregador de notícies. El proper cop que cliqueu a la icona de les "
+"notícies, s'agregarà automàticament."
#: ../midori/midori-browser.c:2589 ../extensions/feed-panel/main.c:349
msgid "New feed"
-msgstr "Nou canal"
+msgstr "Canal web nou"
#: ../midori/midori-browser.c:2620 ../midori/midori-browser.c:5401
#: ../panels/midori-bookmarks.c:678
@@ -394,7 +396,7 @@ msgstr "Afegeix una adreça d'interès"
#. FIXME: granite: should return GtkWidget* like GTK+
#: ../midori/midori-browser.c:2669 ../midori/midori-browser.c:5277
msgid "Share this page"
-msgstr ""
+msgstr "Comparteix aquesta pàgina"
#: ../midori/midori-browser.c:3149 ../midori/midori-searchaction.c:450
msgid "Empty"
@@ -419,17 +421,17 @@ msgstr "_Activa navegació mitjançant símbol d'intercalació"
#: ../midori/midori-browser.c:3930 ../midori/midori-browser.c:5849
#, c-format
msgid "Failed to insert new history item: %s\n"
-msgstr "No s'ha pogut afegir un element nou de l'historial: %s\n"
+msgstr "No s'ha pogut afegir un element nou a l'historial: %s\n"
#: ../midori/midori-browser.c:4251 ../panels/midori-bookmarks.c:994
#: ../panels/midori-history.c:739
msgid "Open all in _Tabs"
-msgstr "Obre-ho tot en _pestanyes"
+msgstr "Obre-ho tot en pes_tanyes"
#: ../midori/midori-browser.c:4260 ../panels/midori-bookmarks.c:1002
#: ../panels/midori-history.c:745 ../extensions/feed-panel/feed-panel.c:503
msgid "Open in New _Tab"
-msgstr "Obre l'enllaç en una _pestanya nova"
+msgstr "Obre en una pes_tanya nova"
#: ../midori/midori-browser.c:4263 ../midori/midori-view.c:2654
#: ../midori/midori-view.c:4580 ../panels/midori-bookmarks.c:1004
@@ -482,11 +484,11 @@ msgstr "_Aplicació:"
#: ../midori/midori-browser.c:4457
msgid "Import from XBEL or HTML file"
-msgstr "Importa d'unn fitxer XBEL o HTML"
+msgstr "Importa d'un fitxer XBEL o HTML"
#: ../midori/midori-browser.c:4485
msgid "Import from a file"
-msgstr "Importar d'un fitxer"
+msgstr "Importa des d'un fitxer"
#: ../midori/midori-browser.c:4497
msgid "Failed to import bookmarks"
@@ -498,11 +500,11 @@ msgstr "Adreces d'interès XBEL"
#: ../midori/midori-browser.c:4533
msgid "Netscape Bookmarks"
-msgstr "Adreces d'interés Netscape"
+msgstr "Adreces d'interés del Netscape"
#: ../midori/midori-browser.c:4547
msgid "Midori can only export to XBEL (*.xbel) and Netscape (*.html)"
-msgstr "Midori només pot exportar a XBEL (*.xbel) i Netscape (*.html)"
+msgstr "El Midori només pot exportar a XBEL (*.xbel) i Netscape (*.html)"
#: ../midori/midori-browser.c:4562
msgid "Failed to export bookmarks"
@@ -514,7 +516,7 @@ msgstr "Un navegador de pàgines web lleuger."
#: ../midori/midori-browser.c:4753
msgid "See about:version for version info."
-msgstr "Vegeu Quant a:version per a informació de la versió."
+msgstr "Vegeu about:version per a més informació sobre la versió."
#: ../midori/midori-browser.c:4755
msgid ""
@@ -537,10 +539,12 @@ msgstr ""
"Launchpad Contributions:\n"
" Alfredo Hernández https://launchpad.net/~aldomann\n"
" Carles Munoz Gorriz https://launchpad.net/~carlesmu\n"
+" Marc https://launchpad.net/~noviluni\n"
" Paul Garden https://launchpad.net/~kiari62\n"
" WebKit Team https://launchpad.net/~webkit-team\n"
" Xan https://launchpad.net/~dxpublica\n"
-" mid-kid https://launchpad.net/~esteve-varela"
+" mid-kid https://launchpad.net/~esteve-varela\n"
+" xavi ballestar https://launchpad.net/~xballestar"
#: ../midori/midori-browser.c:5243
msgid "_File"
@@ -556,7 +560,7 @@ msgstr "Obre una pestanya nova"
#: ../midori/midori-browser.c:5251
msgid "New P_rivate Browsing Window"
-msgstr "Nova finestra de navegació p_rivada"
+msgstr "Finestra de navegació p_rivada nova"
#: ../midori/midori-browser.c:5255
msgid "Open a file"
@@ -568,7 +572,7 @@ msgstr "_Desa pàgina com…"
#: ../midori/midori-browser.c:5258
msgid "Save to a file"
-msgstr "Desa en un fitxer"
+msgstr "Desa a un fitxer"
#: ../midori/midori-browser.c:5260
msgid "Add to Speed _dial"
@@ -576,7 +580,7 @@ msgstr "Afegeix al _velocímetre"
#: ../midori/midori-browser.c:5263
msgid "Subscribe to News _feed"
-msgstr "Subscriure's a un _canal de notícies"
+msgstr "Subscriu-te al _canal de notícies"
#: ../midori/midori-browser.c:5269
msgid "_Close Tab"
@@ -628,15 +632,15 @@ msgstr "Canvia les preferències de l'aplicació"
#: ../midori/midori-browser.c:5322
msgid "_View"
-msgstr "_Visualitza"
+msgstr "Vi_sualitza"
#: ../midori/midori-browser.c:5323
msgid "_Toolbars"
-msgstr "Barres d'e_ines"
+msgstr "_Barres d'eines"
#: ../midori/midori-browser.c:5328
msgid "Reload page without caching"
-msgstr "Carrega la pàgina sense emmagatzematge en memòria cau"
+msgstr "Recarrega la pàgina sense llegir la memòria cau"
#: ../midori/midori-browser.c:5338
msgid "Increase the zoom level"
@@ -652,7 +656,7 @@ msgstr "_Codificació"
#: ../midori/midori-browser.c:5347
msgid "View So_urce"
-msgstr "Veure codi _font"
+msgstr "Mostra el codi _font"
#: ../midori/midori-browser.c:5350
msgid "Ca_ret Browsing"
@@ -684,7 +688,7 @@ msgstr "_Llegible"
#: ../midori/midori-browser.c:5371
msgid "_Go"
-msgstr "Vé_s"
+msgstr "_Vés"
#: ../midori/midori-browser.c:5374
msgid "Go back to the previous page"
@@ -705,7 +709,7 @@ msgstr "Va a la vostre pàgina d'inici"
#: ../midori/midori-browser.c:5393
msgid "Empty Trash"
-msgstr "Buida la paperera"
+msgstr "Buida les pestanyes tancades recentment"
#: ../midori/midori-browser.c:5396
msgid "Undo _Close Tab"
@@ -713,15 +717,15 @@ msgstr "Desfés _tanca pestanya"
#: ../midori/midori-browser.c:5403
msgid "Add a new _folder"
-msgstr "Afegeix una _carpeta"
+msgstr "Afegeix una _carpeta nova"
#: ../midori/midori-browser.c:5406
msgid "_Import bookmarks…"
-msgstr ""
+msgstr "_Importa les adreces d'interès…"
#: ../midori/midori-browser.c:5409
msgid "_Export bookmarks…"
-msgstr ""
+msgstr "_Exporta les adreces d'interès…"
#: ../midori/midori-browser.c:5412
msgid "_Manage Search Engines…"
@@ -729,7 +733,7 @@ msgstr ""
#: ../midori/midori-browser.c:5415
msgid "_Clear Private Data…"
-msgstr ""
+msgstr "_Neteja les dades privades…"
#: ../midori/midori-browser.c:5418
msgid "_Inspect Page"
@@ -745,7 +749,7 @@ msgstr "_Següent pestanya"
#: ../midori/midori-browser.c:5427
msgid "Move Tab to _first position"
-msgstr ""
+msgstr "Mou la pestanya a la posició _inicial"
#: ../midori/midori-browser.c:5429
msgid "Move Tab _Backward"
@@ -757,7 +761,7 @@ msgstr "_Mou la Pestanya Endavant"
#: ../midori/midori-browser.c:5433
msgid "Move Tab to _last position"
-msgstr ""
+msgstr "Mou la pestanya a la posició _final"
#: ../midori/midori-browser.c:5436
msgid "Focus _Current Tab"
@@ -765,7 +769,7 @@ msgstr "Enfoca la pestanya _actual"
#: ../midori/midori-browser.c:5439
msgid "Focus _Next view"
-msgstr "Enfoca la _Següent vista"
+msgstr "Enfoca la vista _següent"
#: ../midori/midori-browser.c:5442
msgid "Only show the Icon of the _Current Tab"
@@ -891,7 +895,7 @@ msgstr "Mostra les adreces d'interès desades"
#: ../midori/midori-browser.c:6137
msgid "_Tabs"
-msgstr ""
+msgstr "Pes_tanyes"
#: ../midori/midori-browser.c:6139
msgid "Show a list of all open tabs"
@@ -987,7 +991,7 @@ msgstr "Connexió oberta i sense encriptació"
#: ../midori/midori-panel.c:314 ../midori/midori-panel.c:316
#: ../midori/midori-panel.c:480 ../midori/midori-panel.c:483
msgid "Align sidepanel to the right"
-msgstr "Alinear el panell lateral a la dreta"
+msgstr "Alinea el quadre lateral a la dreta"
#: ../midori/midori-panel.c:326 ../midori/midori-panel.c:327
msgid "Close panel"
@@ -995,11 +999,11 @@ msgstr "Tanca el quadre"
#: ../midori/midori-panel.c:481 ../midori/midori-panel.c:484
msgid "Align sidepanel to the left"
-msgstr "Alinear el panell lateral a l'esquerra"
+msgstr "Alinea el quadre lateral a l'esquerra"
#: ../midori/midori-websettings.c:111 ../midori/midori-websettings.c:132
msgid "Show Speed Dial"
-msgstr "Mostra el velocímetre"
+msgstr "Mostra el marcador ràpid"
#: ../midori/midori-websettings.c:112 ../midori/midori-websettings.c:130
msgid "Show Homepage"
@@ -1015,15 +1019,15 @@ msgstr "Mostra les darreres pestanyes sense carregar-les"
#: ../midori/midori-websettings.c:129
msgid "Show Blank Page"
-msgstr ""
+msgstr "Mostra una pàgina en blanc"
#: ../midori/midori-websettings.c:131
msgid "Show default Search Engine"
-msgstr ""
+msgstr "Mostra el motor de cerca predeterminat"
#: ../midori/midori-websettings.c:133
msgid "Show custom page"
-msgstr ""
+msgstr "Mostra una pàgina personalitzada"
#: ../midori/midori-websettings.c:150
msgid "Japanese (SHIFT_JIS)"
@@ -1031,11 +1035,11 @@ msgstr "Japonès (Shift_JIS)"
#: ../midori/midori-websettings.c:170
msgid "New tab"
-msgstr "Nova pestanya"
+msgstr "Pestanya nova"
#: ../midori/midori-websettings.c:171
msgid "New window"
-msgstr "Nova finestra"
+msgstr "Finestra nova"
#: ../midori/midori-websettings.c:172
msgid "Current tab"
@@ -1043,7 +1047,7 @@ msgstr "Pestanya actual"
#: ../midori/midori-websettings.c:187
msgid "Default"
-msgstr "Per defecte"
+msgstr "Predeterminat"
#: ../midori/midori-websettings.c:188
msgid "Icons"
@@ -1119,7 +1123,7 @@ msgstr "No s'ha pogut carregar la configuració: %s\n"
#: ../midori/midori-websettings.c:1454 ../midori/midori-websettings.c:1572
#, c-format
msgid "Invalid configuration value '%s'"
-msgstr "Valor de configuració «%s» no és vàlid"
+msgstr "El valor de configuració «%s» no és vàlid"
#: ../midori/midori-tab.vala:121
#, c-format
@@ -1145,7 +1149,7 @@ msgstr "_Denegar"
#: ../midori/midori-view.c:1088 ../midori/midori-view.c:1119
msgid "_Allow"
-msgstr "_Permetre"
+msgstr "_Permet"
#: ../midori/midori-view.c:1115
#, c-format
@@ -1160,7 +1164,7 @@ msgstr ""
#: ../midori/midori-view.c:1251
#, c-format
msgid "The page '%s' couldn't be loaded:"
-msgstr ""
+msgstr "No s'ha pogut carregar la pàgina «%s»:"
#: ../midori/midori-view.c:1255
msgid "Check the address for typos"
@@ -1171,6 +1175,8 @@ msgid ""
"Make sure that an ethernet cable is plugged in or the wireless card is "
"activated"
msgstr ""
+"Assegureu-vos que el cable de xarxa està endollat o que la targeta de "
+"connexió inalàmbrica està activada."
#: ../midori/midori-view.c:1257
msgid "Verify that your network settings are correct"
@@ -1178,17 +1184,17 @@ msgstr ""
#: ../midori/midori-view.c:1261
msgid "Try Again"
-msgstr ""
+msgstr "Torneu-ho a provar"
#: ../midori/midori-view.c:1386
#, c-format
msgid "Oops - %s"
-msgstr ""
+msgstr "Ostres - %s"
#: ../midori/midori-view.c:1387
#, c-format
msgid "Something went wrong with '%s'."
-msgstr ""
+msgstr "Alguna cosa ha anat malament amb '%s'"
#: ../midori/midori-view.c:1389
msgid "Try again"
@@ -1197,7 +1203,7 @@ msgstr "Torneu-ho a provar"
#: ../midori/midori-view.c:1527 ../midori/midori-view.c:2595
#, c-format
msgid "Send a message to %s"
-msgstr "Enviar un missatge a %s"
+msgstr "Envia un missatge a %s"
#: ../midori/midori-view.c:2378
msgid "Add _search engine..."
@@ -1213,7 +1219,7 @@ msgstr ""
#: ../midori/midori-view.c:2478
msgid "Open Link in New _Tab"
-msgstr "Obre l'enllaç en una nova _pestanya"
+msgstr "Obre l'enllaç en una pes_tanya nova"
#: ../midori/midori-view.c:2482
msgid "Open Link in _Foreground Tab"
@@ -1225,7 +1231,7 @@ msgstr "Obre l'enllaç en una nova pestanya _no activa"
#: ../midori/midori-view.c:2486
msgid "Open Link in New _Window"
-msgstr "Obre l'enllaç a una nova _finestra"
+msgstr "Obre l'enllaç en una _finestra nova"
#: ../midori/midori-view.c:2491
msgid "Copy Link de_stination"
@@ -1233,19 +1239,19 @@ msgstr "_Copia la destinació de l'enllaç"
#: ../midori/midori-view.c:2497
msgid "Save _As…"
-msgstr ""
+msgstr "_Anomena i desa…"
#: ../midori/midori-view.c:2507
msgid "Open _Image in New Window"
-msgstr ""
+msgstr "Obre la _imatge en una finestra nova"
#: ../midori/midori-view.c:2508
msgid "Open _Image in New Tab"
-msgstr "Obre la _imatge en una nova pestanya"
+msgstr "Obre la _imatge en una pestanya nova"
#: ../midori/midori-view.c:2512
msgid "Copy Im_age"
-msgstr ""
+msgstr "Copia la im_atge"
#: ../midori/midori-view.c:2515
msgid "Save I_mage"
@@ -1265,7 +1271,7 @@ msgstr "Desa el _vídeo"
#: ../midori/midori-view.c:2528
msgid "Download _Video"
-msgstr "Descarrega el _vídeo"
+msgstr "Baixa el _vídeo"
#: ../midori/midori-view.c:2554
msgid "Search _with"
@@ -1273,11 +1279,11 @@ msgstr "Cerca _amb"
#: ../midori/midori-view.c:2583
msgid "_Search the Web"
-msgstr "_Cerca la Web"
+msgstr "_Cerca al web"
#: ../midori/midori-view.c:2603
msgid "Open Address in New _Tab"
-msgstr "Obre l'adreça en una nova _pestanya"
+msgstr "Obre l'adreça en una pes_tanya nova"
#: ../midori/midori-view.c:2650
msgid "Open _Frame in New Tab"
@@ -1326,11 +1332,11 @@ msgstr "No s'ha instaŀlat la documentació"
#: ../midori/midori-view.c:4107
msgid "Midori doesn't store any personal data:"
-msgstr "Midori no desa cap informació personal:"
+msgstr "El Midori no desa cap informació personal:"
#: ../midori/midori-view.c:4108
msgid "No history or web cookies are being saved."
-msgstr "No es desa ni l'historial ni les galetes."
+msgstr "No es desen ni l'historial ni les galetes."
#: ../midori/midori-view.c:4109
msgid "Extensions are disabled."
@@ -1339,12 +1345,12 @@ msgstr "Les extensions estan deshabilitades."
#: ../midori/midori-view.c:4110
msgid "HTML5 storage, local database and application caches are disabled."
msgstr ""
-"Emmagatzematge HTML5, base de dades local i memòria cau d'aplicacions "
-"deshabilitades."
+"L'emmagatzematge HTML5, les bases de dades locals i la memòria cau de "
+"l'aplicació estan desactivats."
#: ../midori/midori-view.c:4111
msgid "Midori prevents websites from tracking the user:"
-msgstr "Midori evita que els llocs webs controlin l'usiari:"
+msgstr "El Midori evita que els llocs webs controlin l'usuari:"
#: ../midori/midori-view.c:4112
msgid "Referrer URLs are stripped down to the hostname."
@@ -1361,7 +1367,7 @@ msgstr "L'idioma i la zona horària no són visibles als llocs webs."
#: ../midori/midori-view.c:4115
msgid "Flash and other Netscape plugins cannot be listed by websites."
msgstr ""
-"El Flash i altres connectors de Netscape no es poden llistar als llocs webs."
+"El Flash i altres connectors del Netscape no es poden llistar als llocs webs."
#: ../midori/midori-view.c:4158
msgid "Version numbers in brackets show the version used at runtime."
@@ -1381,7 +1387,7 @@ msgstr ""
#: ../midori/midori-view.c:4211
msgid "Load Page"
-msgstr "Carregar pàgina"
+msgstr "Carrega la pàgina"
#: ../midori/midori-view.c:4376
msgid "Blank page"
@@ -1473,15 +1479,15 @@ msgstr " (%s/s)"
#: ../midori/midori-download.vala:218
msgid "The downloaded file is erroneous."
-msgstr "El fitxer descarregat conté errors."
+msgstr "El fitxer baixat conté errors."
#: ../midori/midori-download.vala:219
msgid ""
"The checksum provided with the link did not match. This means the file is "
"probably incomplete or was modified afterwards."
msgstr ""
-"El checksum proveït a l'enllaç no coincideix. Això vol dir que l'arxiu "
-"probablement està incomplet o ha sigut modificat posteriorment."
+"La suma de verificació proveïda a l'enllaç no coincideix. Això vol dir que "
+"el fitxer probablement està incomplet o ha estat modificat posteriorment."
#: ../midori/midori-download.vala:339
#, c-format
@@ -1490,17 +1496,17 @@ msgstr "No es pot desar el fitxer «%s» en aquesta carpeta."
#: ../midori/midori-download.vala:341
msgid "You don't have permission to write in this location."
-msgstr "No teniu permís per a escriure en aquesta ubicació."
+msgstr "No teniu permís per escriure en aquesta ubicació."
#: ../midori/midori-download.vala:344
#, c-format
msgid "There is not enough free space to download \"%s\"."
-msgstr "No hi ha prou espai lliure per descarregat «%s»."
+msgstr "No hi ha prou espai lliure per baixar «%s»."
#: ../midori/midori-download.vala:346
#, c-format
msgid "The file needs %s but only %s are left."
-msgstr "Al fitxer li cal %s però només resten %s lliures."
+msgstr "El fitxer necessita %s però només resten %s lliures."
#: ../midori/midori-speeddial.vala:187
msgid "Speed Dial"
@@ -1508,7 +1514,7 @@ msgstr "Velocímetre"
#: ../midori/midori-speeddial.vala:188 ../midori/midori-speeddial.vala:268
msgid "Click to add a shortcut"
-msgstr "Feu clic per a afegir una drecera"
+msgstr "Feu clic per afegir una drecera"
#: ../midori/midori-speeddial.vala:189
msgid "Enter shortcut address"
@@ -1520,7 +1526,7 @@ msgstr "Introduïu un títol per a la drecera"
#: ../midori/midori-speeddial.vala:191
msgid "Are you sure you want to delete this shortcut?"
-msgstr "Esteu segur d'esborrar aquesta drecera?"
+msgstr "Esteu segur que voleu suprimir aquesta drecera?"
#: ../midori/midori-preferences.c:297
msgid "Startup"
@@ -1528,7 +1534,7 @@ msgstr "Inicialització"
#: ../midori/midori-preferences.c:299
msgid "When Midori starts:"
-msgstr "Quan Midori s'inicia:"
+msgstr "Quan el Midori s'inicia:"
#: ../midori/midori-preferences.c:304
msgid "Homepage:"
@@ -1554,11 +1560,11 @@ msgstr "Família de tipus de lletra proporcional"
#: ../midori/midori-preferences.c:331
msgid "The default font family used to display text"
msgstr ""
-"La família de tipus de lletra per defecte emprada per mostrar el text"
+"La família de tipus de lletra predeterminada emprada per mostrar el text"
#: ../midori/midori-preferences.c:334
msgid "The default font size used to display text"
-msgstr "La mida del tipus de lletra per defecte emprada per mostrar el text"
+msgstr "La mida del tipus de lletra predeterminat emprat per mostrar el text"
#: ../midori/midori-preferences.c:336
msgid "Fixed-width Font Family"
@@ -1566,11 +1572,11 @@ msgstr "Família de tipus de lletra d'amplada fixa"
#: ../midori/midori-preferences.c:340
msgid "The font family used to display fixed-width text"
-msgstr "La família de fonts per a mostrar text de mida fixa"
+msgstr "La família de tipus de lletra emprat per mostrar textos de mida fixa"
#: ../midori/midori-preferences.c:343
msgid "The font size used to display fixed-width text"
-msgstr "La mida de la font usada per a mostrar text de mida fixa"
+msgstr "La mida del tipus de lletra emprat per mostrar textos de mida fixa"
#: ../midori/midori-preferences.c:345
msgid "Minimum Font Size"
@@ -1578,7 +1584,7 @@ msgstr "Mida mínima del tipus de lletra"
#: ../midori/midori-preferences.c:349
msgid "The minimum font size used to display text"
-msgstr "La mida mínima del tipus de lletra emprada per mostrar text"
+msgstr "La mida mínima del tipus de lletra emprat per mostrar textos"
#: ../midori/midori-preferences.c:353
msgid "Preferred Encoding"
@@ -1595,23 +1601,23 @@ msgstr "Carrega les imatges automàticament"
#: ../midori/midori-preferences.c:366
msgid "Enable Spell Checking"
-msgstr "Habilita el corrector ortogràfic"
+msgstr "Activa la comprovació ortogràfica"
#: ../midori/midori-preferences.c:380 ../extensions/statusbar-features.c:165
msgid "Enable scripts"
-msgstr "Habilita els scripts"
+msgstr "Activa els scripts"
#: ../midori/midori-preferences.c:383
msgid "Enable WebGL support"
-msgstr "Habilita la compatibilitat WebGL"
+msgstr "Activa la compatibilitat amb el WebGL"
#: ../midori/midori-preferences.c:400
msgid "Zoom Text and Images"
-msgstr "Ampliar text i imatges"
+msgstr "Amplia texts i imatges"
#: ../midori/midori-preferences.c:403
msgid "Allow scripts to open popups"
-msgstr "Permetre als scripts obrir finestres emergents"
+msgstr "Permet als scripts d'obrir finestres emergents"
#: ../midori/midori-preferences.c:404
msgid "Whether scripts are allowed to open popup windows automatically"
@@ -1639,7 +1645,7 @@ msgstr ""
#: ../midori/midori-preferences.c:420
msgid "Save downloaded files to:"
-msgstr "Desar els fitxers descarregats a:"
+msgstr "Desa els fitxers baixats a:"
#. Page "Interface"
#: ../midori/midori-preferences.c:427
@@ -1652,11 +1658,11 @@ msgstr "Estil de la barra d'eines:"
#: ../midori/midori-preferences.c:433
msgid "Open new pages in:"
-msgstr "Obre les noves pàgines a:"
+msgstr "Obre les pàgines noves a:"
#: ../midori/midori-preferences.c:437
msgid "New tab behavior:"
-msgstr ""
+msgstr "Comportament de les pestanyes noves:"
#: ../midori/midori-preferences.c:442
msgid "Close Buttons on Tabs"
@@ -1674,7 +1680,8 @@ msgstr "Obre les pestanyes al costat de l'actual"
msgid ""
"Whether to open new tabs next to the current tab or after the last one"
msgstr ""
-"Si obrir les noves pestanyes al costat de la pestanya actual o de l'última"
+"Si s'han d'obrir les pestanyes noves al costat de la pestanya actual o al "
+"costat de la darrera"
#: ../midori/midori-preferences.c:454
msgid "Open tabs in the background"
@@ -1712,7 +1719,7 @@ msgstr ""
#. TODO: Preserve page icons of search engines and merge privacy items
#: ../midori/midori-preferences.c:515 ../midori/midori-privatedata.c:323
msgid "Web Cache"
-msgstr "Memòria cau Web"
+msgstr "Memòria cau del web"
#: ../midori/midori-preferences.c:516 ../midori/midori-preferences.c:519
msgid "The maximum size of cached pages on disk"
@@ -1733,11 +1740,11 @@ msgstr "Privacitat"
#: ../midori/midori-preferences.c:544
msgid "Delete old Cookies after:"
-msgstr "Esborrar les galetes antigues després de:"
+msgstr "Suprimeix les galetes antigues després de:"
#: ../midori/midori-preferences.c:546 ../midori/midori-preferences.c:549
msgid "The maximum number of days to save cookies for"
-msgstr "El nombre màxim de dies que es guardaran les galetes"
+msgstr "El nombre màxim de dies que es desaran les galetes"
#: ../midori/midori-preferences.c:553
msgid "Only accept Cookies from sites you visit"
@@ -1757,11 +1764,11 @@ msgstr ""
#: ../midori/midori-preferences.c:566
msgid "Enable offline web application cache"
-msgstr "Habilita la memòria cau d'aplicació de fora de línia"
+msgstr "Activa la memòria cau local d'aplicacions web"
#: ../midori/midori-preferences.c:569
msgid "Enable HTML5 local storage support"
-msgstr "Habilita l'emmagatzematge local HTML5"
+msgstr "Activa l'emmagatzematge local HTML5"
#. i18n: Reworded: Shorten details propagated when going to another page
#: ../midori/midori-preferences.c:573
@@ -1772,11 +1779,11 @@ msgstr "Treu la informació de referència enviada als llocs webs"
#: ../midori/midori-preferences.c:575
msgid "Whether the \"Referer\" header should be shortened to the hostname"
msgstr ""
-"Si la capçalera \"Referer\" hauria d'haver estat escurçada al nom del host"
+"Si la capçalera «Referer» ha de ser escurçada al nom de l'ordinador central"
#: ../midori/midori-preferences.c:578
msgid "Delete pages from history after:"
-msgstr "Esborra les pàgines de l'historia després de:"
+msgstr "Suprimeix les pàgines de l'historial després de:"
#: ../midori/midori-preferences.c:580 ../midori/midori-preferences.c:583
msgid "The maximum number of days to save the history for"
@@ -1820,7 +1827,7 @@ msgstr "Gestiona els ginys de cerca"
#: ../midori/midori-searchaction.c:1506
msgid "Use as _default"
-msgstr "Empra'l per _defecte"
+msgstr "Empra'l com a pre_determinat"
#: ../midori/midori-searchaction.c:1617
#, c-format
@@ -1830,7 +1837,7 @@ msgstr "No s'han pogut carregar els motors de cerca. %s\n"
#: ../midori/midori-searchaction.c:1672
#, c-format
msgid "The search engines couldn't be saved. %s"
-msgstr "No es pot desar les enginys de cerca. %s"
+msgstr "No s'han pogut desar les enginys de cerca. %s"
#: ../midori/midori-historycompletion.vala:17
msgid "Bookmarks and History"
@@ -1850,7 +1857,7 @@ msgstr ""
#: ../midori/midori-historycompletion.vala:83
#, c-format
msgid "Search for %s"
-msgstr "Cercar %s"
+msgstr "Cerca %s"
#: ../midori/midori-searchcompletion.vala:20
#: ../midori/midori-searchcompletion.vala:57
@@ -1878,7 +1885,7 @@ msgstr "No s'ha pogut executar el programa extern."
#: ../midori/sokoke.c:552
msgid "Invalid URI"
-msgstr ""
+msgstr "L'URI no és vàlid"
#. i18n: A panel at the bottom, to search text in pages
#: ../toolbars/midori-findbar.c:233
@@ -1904,47 +1911,47 @@ msgstr "Tanca la barra de cerques"
#: ../panels/midori-bookmarks.c:312
#, c-format
msgid "Failed to add bookmark item: %s\n"
-msgstr "No s'ha pogut afegir un ítem a les adreces d'interès: %s\n"
+msgstr "No s'ha pogut afegir l'element a les adreces d'interès: %s\n"
#. i18n: [n] bookmark(s)
#: ../panels/midori-bookmarks.c:496
#, c-format
msgid "%d bookmark"
msgid_plural "%d bookmarks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d adreça d'interès"
+msgstr[1] "%d adreces d'interès"
#. i18n: [n] subfolder(s)
#: ../panels/midori-bookmarks.c:506
#, c-format
msgid "%d subfolder"
msgid_plural "%d subfolders"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d subcarpeta"
+msgstr[1] "%d subcarpetes"
#. i18n: Empty folder
#: ../panels/midori-bookmarks.c:534
#, c-format
msgid "Empty folder"
-msgstr ""
+msgstr "Carpeta buida"
#. i18n: Folder containing [[n] folder(s)] and no bookmark
#: ../panels/midori-bookmarks.c:537
#, c-format
msgid "Folder containing %s and no bookmark"
-msgstr ""
+msgstr "La carpeta conté %s i cap adreça d'interès"
#. i18n: Folder containing [[n] bookmark(s)]
#: ../panels/midori-bookmarks.c:541
#, c-format
msgid "Folder containing %s"
-msgstr ""
+msgstr "La carpeta conté %s"
#. i18n: Folder containing [[n] bookmark(s)] and [[n] folder(s)]
#: ../panels/midori-bookmarks.c:544
#, c-format
msgid "Folder containing %s and %s"
-msgstr ""
+msgstr "La carpeta conté %s i %s"
#. i18n: Bookmark leading to: [bookmark uri]
#: ../panels/midori-bookmarks.c:555
@@ -1962,7 +1969,7 @@ msgstr ""
#: ../panels/midori-bookmarks.c:575
#, c-format
msgid "%s and %s"
-msgstr ""
+msgstr "%s i %s"
#: ../panels/midori-bookmarks.c:627
#, c-format
@@ -1996,7 +2003,7 @@ msgstr "Historial"
#: ../panels/midori-history.c:133
msgid "Today"
-msgstr "Avuí"
+msgstr "Avui"
#: ../panels/midori-history.c:135
msgid "Yesterday"
@@ -2016,11 +2023,11 @@ msgstr "Setmana passada"
#: ../panels/midori-history.c:185
#, c-format
msgid "Failed to remove history item: %s\n"
-msgstr "No s'ha pogut eliminar un element de l'historial: %s\n"
+msgstr "No s'ha pogut suprimir un element de l'historial: %s\n"
#: ../panels/midori-history.c:312
msgid "Are you sure you want to remove all history items?"
-msgstr "Voleu esborrar tots els elements de l’historial?"
+msgstr "Esteu segur que voleu suprimir tots els elements de l’historial?"
#: ../panels/midori-history.c:358
msgid "Bookmark the selected history item"
@@ -2028,7 +2035,7 @@ msgstr "Afegeix l'element seleccionat de l'historial a les adreces d'interès"
#: ../panels/midori-history.c:367
msgid "Delete the selected history item"
-msgstr "Esborra l'element de l'historial seleccionat"
+msgstr "Suprimeix l'element de l'historial seleccionat"
#: ../panels/midori-history.c:375
msgid "Clear the entire history"
@@ -2049,7 +2056,7 @@ msgid ""
"to open this location:"
msgstr ""
"És necessari un nom d'usuari i una contrasenya\n"
-"per a obrir aquesta ubicació:"
+"per obrir aquesta ubicació:"
#: ../katze/katze-http-auth.c:240
msgid "Username"
@@ -2066,12 +2073,12 @@ msgstr "_Recorda la contrasenya"
#: ../katze/katze-throbber.c:889
#, c-format
msgid "Named icon '%s' couldn't be loaded"
-msgstr "La icona amb nom «%s» no s'ha pogut carregar"
+msgstr "No s'ha pogut carregar la icona amb nom «%s»"
#: ../katze/katze-throbber.c:902
#, c-format
msgid "Stock icon '%s' couldn't be loaded"
-msgstr "La icona «%s» no s'ha pogut carregar"
+msgstr "No s'ha pogut carregar la icona «%s»"
#: ../katze/katze-utils.c:385
msgid "None"
@@ -2085,11 +2092,11 @@ msgstr "La propietat «%s» no és vàlida per a %s"
#: ../katze/katze-utils.c:565 ../katze/katze-utils.c:594
#: ../extensions/addons.c:308
msgid "Choose file"
-msgstr "Seleccioneu fitxer"
+msgstr "Seleccioneu un fitxer"
#: ../katze/katze-utils.c:580
msgid "Choose folder"
-msgstr "Seleccioneu carpeta"
+msgstr "Seleccioneu una carpeta"
#: ../katze/katze-utils.c:744
msgid "1 hour"
@@ -2136,8 +2143,8 @@ msgid ""
"Type the address of a preconfigured filter list in the text entry and click "
"\"Add\" to add it to the list. You can find more lists at %s."
msgstr ""
-"Escriu l'adreça d'una llista de filtres preconfigurada a l'entrada de text i "
-"premeu \"Afegir\" per a afegir-ho a la llista. Podeu trobar més llistes a %s."
+"Escriviu l'adreça d'una llista de filtres preconfigurada a l'entrada de text "
+"i premeu «Afegeix» per afegir-lo a la llista. Podeu trobar més llistes a %s."
#: ../extensions/adblock.c:917
msgid "Edit rule"
@@ -2171,7 +2178,7 @@ msgstr "Sembla que aquesta pàgina té un script d'usuari. El voleu instaŀlar?"
#: ../extensions/addons.c:223
msgid "_Install user script"
-msgstr "_Instalŀa l'script d'usuari"
+msgstr "Instal·la l'script d'usuari"
#. i18n: An infobar shows up when viewing a style on userstyles.org
#: ../extensions/addons.c:228
@@ -2197,7 +2204,7 @@ msgstr "Estils d'usuari"
#: ../extensions/addons.c:370 ../extensions/addons.c:449
#: ../extensions/feed-panel/main.c:114
msgid "Error"
-msgstr "Error"
+msgstr "S'ha produït un error"
#: ../extensions/addons.c:411
#, c-format
@@ -2215,7 +2222,7 @@ msgstr "Suprimeix l'estil d'usuari"
#: ../extensions/addons.c:421
#, c-format
msgid "The file <b>%s</b> will be permanently deleted."
-msgstr "El fitxer «<b>%s</b>» s'esborrarà de forma permanent."
+msgstr "El fitxer «<b>%s</b>» se suprimirà permanentment."
#: ../extensions/addons.c:563 ../extensions/addons.c:639
msgid "Open in Text Editor"
@@ -2227,15 +2234,15 @@ msgstr "Obre la carpeta destí"
#: ../extensions/addons.c:630
msgid "Add new addon"
-msgstr "Afegeix un nou afegitó"
+msgstr "Afegeix un complement nou"
#: ../extensions/addons.c:656
msgid "Remove selected addon"
-msgstr "Suprimeix l'afegitó seleccionat"
+msgstr "Suprimeix el complement seleccionat"
#: ../extensions/addons.c:1681 ../extensions/addons.c:1897
msgid "User addons"
-msgstr "Afegitons de l'usuari"
+msgstr "Complements de l'usuari"
#: ../extensions/addons.c:1811
#, c-format
@@ -2268,8 +2275,8 @@ msgid ""
"Deletes all shown cookies. If a filter is set, only those cookies are "
"deleted which match the filter."
msgstr ""
-"Esborra totes les galetes mostrades. Si hi ha un filtre establert, només "
-"aquelles galetes que coincideixin amb el filtre s'esborraran."
+"Suprimeix totes les galetes mostrades. Si hi ha un filtre establert, només "
+"aquelles galetes que coincideixin amb el filtre se suprimiran."
#: ../extensions/cookie-manager/cookie-manager-page.c:116
msgid "Expand All"
@@ -2281,7 +2288,7 @@ msgstr "Colapsa-ho tot"
#: ../extensions/cookie-manager/cookie-manager-page.c:571
msgid "Do you really want to delete all cookies?"
-msgstr "Voleu eliminar totes les galetes?"
+msgstr "Esteu segur que voleu suprimir totes les galetes?"
#: ../extensions/cookie-manager/cookie-manager-page.c:573
msgid "Question"
@@ -2289,11 +2296,11 @@ msgstr "Qüestió"
#: ../extensions/cookie-manager/cookie-manager-page.c:584
msgid "Only cookies which match the filter will be deleted."
-msgstr "Només s'esborraran les galetes que coincideixin amb el filtre."
+msgstr "Només se suprimiran les galetes que coincideixin amb el filtre."
#: ../extensions/cookie-manager/cookie-manager-page.c:668
msgid "At the end of the session"
-msgstr "Al finalitzar la sessió"
+msgstr "En finalitzar la sessió"
#: ../extensions/cookie-manager/cookie-manager-page.c:671
#, c-format
@@ -2349,7 +2356,7 @@ msgstr "Cerca galetes per nom o domini"
#: ../extensions/cookie-manager/main.c:36
msgid "List, view and delete cookies"
-msgstr "Llista, mostra i borra galetes"
+msgstr "Llista, mostra i suprimeix galetes"
#: ../extensions/copy-tabs.c:39
msgid "Copy Tab _Addresses"
@@ -2370,11 +2377,12 @@ msgstr ""
#: ../extensions/delayed-load.vala:49
msgid "Delay in seconds until loading the page:"
-msgstr ""
+msgstr "Retard en segons fins que es carregui la pàgina:"
#: ../extensions/delayed-load.vala:213
msgid "Delay page load until you actually use the tab."
msgstr ""
+"Retarda la càrrega de la pàgina fins que realment utilitzeu la pestanya."
#: ../extensions/external-download-manager.vala:124
msgid ""
@@ -2400,12 +2408,12 @@ msgstr ""
#: ../extensions/external-download-manager.vala:249
msgid "Command:"
-msgstr ""
+msgstr "Ordre:"
#: ../extensions/external-download-manager.vala:304
#, c-format
msgid "Download files with \"%s\" or a custom command"
-msgstr ""
+msgstr "Baixa els fitxers amb «%s» o una ordre personalitzada"
#: ../extensions/external-download-manager.vala:320
msgid "External Download Manager - CommandLine"
@@ -2413,11 +2421,11 @@ msgstr ""
#: ../extensions/feed-panel/feed-atom.c:208
msgid "Failed to find required Atom \"entry\" elements in XML data."
-msgstr "No s'han pogut trobar elements Atom \"entry\" en les dades XML."
+msgstr "No s'han pogut trobar elements Atom «entry» en les dades XML."
#: ../extensions/feed-panel/feed-atom.c:314
msgid "Failed to find required Atom \"feed\" elements in XML data."
-msgstr "No s'han pogut trobar elements Atom \"feed\" en les dades XML."
+msgstr "No s'han pogut trobar elements Atom «feed» en les dades XML."
#. i18n: The local date a feed was last updated
#: ../extensions/feed-panel/feed-panel.c:367
@@ -2432,11 +2440,11 @@ msgstr "Canals"
#: ../extensions/feed-panel/feed-panel.c:672
msgid "Add new feed"
-msgstr "Afegeix un nou canal"
+msgstr "Afegeix un canal web nou"
#: ../extensions/feed-panel/feed-panel.c:679
msgid "Delete feed"
-msgstr "Suprimeix el canal"
+msgstr "Suprimeix el canal web"
#: ../extensions/feed-panel/feed-panel.c:758
msgid "_Feeds"
@@ -2445,7 +2453,8 @@ msgstr "_Canals"
#: ../extensions/feed-panel/feed-parse.c:195
#, c-format
msgid "Failed to find root element in feed XML data."
-msgstr "No s'ha pogut trobar l'element arrel en les dades XML."
+msgstr ""
+"No s'ha pogut trobar l'element arrel en les dades XML dels canals web."
#: ../extensions/feed-panel/feed-parse.c:237
#, c-format
@@ -2455,11 +2464,11 @@ msgstr "Format de canal no compatible."
#: ../extensions/feed-panel/feed-parse.c:267
#, c-format
msgid "Failed to parse XML feed: %s"
-msgstr "No s'ha pogut analitzar el canal XML: %s"
+msgstr "No s'ha pogut analitzar el canal web XML: %s"
#: ../extensions/feed-panel/feed-rss.c:50
msgid "Failed to find \"channel\" element in RSS XML data."
-msgstr "No s'ha pogut trobar l'element \"channel\" en les dades RSS XML."
+msgstr "No s'ha pogut trobar l'element «channel» en les dades RSS XML."
#: ../extensions/feed-panel/feed-rss.c:55
msgid "Unsupported RSS version found."
@@ -2467,11 +2476,11 @@ msgstr "Versió RSS no compatible."
#: ../extensions/feed-panel/feed-rss.c:152
msgid "Failed to find required RSS \"item\" elements in XML data."
-msgstr "No s'ha pogut trobar els elements RSS \"item\" en les dades XML."
+msgstr "No s'han pogut trobar els elements RSS «item» en les dades XML."
#: ../extensions/feed-panel/feed-rss.c:252
msgid "Failed to find required RSS \"channel\" elements in XML data."
-msgstr "No s'ha pogut trobar els elements RSS \"channel\" en les dades XML."
+msgstr "No s'han pogut trobar els elements RSS «channel» en les dades XML."
#: ../extensions/feed-panel/main.c:116
#, c-format
@@ -2481,7 +2490,7 @@ msgstr "El canal «%s» ja existeix."
#: ../extensions/feed-panel/main.c:192
#, c-format
msgid "Error loading feed '%s'"
-msgstr "Error en carregar el canal «%s»"
+msgstr "S'ha produït un error en carregar el canal «%s»"
#: ../extensions/feed-panel/main.c:499
msgid "Feed Panel"
@@ -2542,7 +2551,7 @@ msgstr "No s'ha pogut obrir la base de dades: %s\n"
#: ../extensions/formhistory/formhistory.c:524
#, c-format
msgid "Failed to execute database statement: %s\n"
-msgstr "No s'ha pogut executar la comanda a la base de dades: %s\n"
+msgstr "No s'ha pogut executar l'ordre a la base de dades: %s\n"
#: ../extensions/formhistory/formhistory.c:611
msgid "Only activate form history via hotkey (Ctrl+Shift+F) per tab"
@@ -2559,7 +2568,7 @@ msgstr "Emmagatzema l'historial de les dades introduïdes als formularis"
#: ../extensions/formhistory/formhistory-gdom-frontend.c:222
#, c-format
msgid "Failed to select suggestions\n"
-msgstr "No s'ha pogut seleccionar suggeriments\n"
+msgstr "No s'han pogut seleccionar els suggeriments\n"
#: ../extensions/history-list.vala:252
msgid "There are no unvisited tabs"
@@ -2592,19 +2601,19 @@ msgstr "Flaix a la finestra per les pestanyes inactives"
#: ../extensions/history-list.vala:499
msgid "Next new Tab (History List)"
-msgstr "Nova pestanya següent (Llista de l'historial)"
+msgstr "Pestanya nova següent (llista de l'historial)"
#: ../extensions/history-list.vala:500
msgid "Next new tab from history"
-msgstr "Nova pestanya següent de l'historial"
+msgstr "Pestanya nova següent de l'historial"
#: ../extensions/history-list.vala:509
msgid "Previous new Tab (History List)"
-msgstr "Nova pestanya anterior (Llista de l'historial)"
+msgstr "Pestanya nova anterior (Llista de l'historial)"
#: ../extensions/history-list.vala:510
msgid "Previous new tab from history"
-msgstr "Nova pestanya anterior de l'historial"
+msgstr "Pestanya nova anterior de l'historial"
#: ../extensions/history-list.vala:519
msgid "Display tab in background (History List)"
@@ -2621,7 +2630,7 @@ msgstr "Llista de l'historial"
#: ../extensions/history-list.vala:650
msgid "Move to the last used tab when switching or closing tabs"
msgstr ""
-"Mou a la ultima pestanya utilitzada quan es canvien o tanquen pestanyes"
+"Mou a la darrera pestanya utilitzada quan es canvien o tanquen pestanyes"
#: ../extensions/mouse-gestures.c:513
msgid "Mouse Gestures"
@@ -2629,11 +2638,11 @@ msgstr "Gesticulacions de ratolí"
#: ../extensions/mouse-gestures.c:514
msgid "Control Midori by moving the mouse"
-msgstr "Controla Midori usant el ratolí"
+msgstr "Controleu el Midori emprant el ratolí"
#: ../extensions/shortcuts.c:109
msgid "Reload page or stop loading"
-msgstr "Carrega la pàgina de nou o atura la càrrega"
+msgstr "Recarrega la pàgina o atura la càrrega"
#: ../extensions/shortcuts.c:168
msgid "Customize Keyboard shortcuts"
@@ -2657,7 +2666,7 @@ msgstr "Rellotge a la barra d'estat"
#: ../extensions/status-clock.c:169
msgid "Display date and time in the statusbar"
-msgstr "Mostrar la data i l'hora a la barra d'estat"
+msgstr "Mostra la data i l'hora a la barra d'estat"
#: ../extensions/statusbar-features.c:152
msgid "Images"
@@ -2669,11 +2678,11 @@ msgstr "Scripts"
#: ../extensions/statusbar-features.c:174
msgid "Netscape plugins"
-msgstr "Connectors de Netscape"
+msgstr "Connectors del Netscape"
#: ../extensions/statusbar-features.c:177
msgid "Enable Netscape plugins"
-msgstr "Habilita els connectors de netscape"
+msgstr "Activa els connectors del Netscape"
#: ../extensions/statusbar-features.c:259
msgid "Statusbar Features"
@@ -2681,7 +2690,7 @@ msgstr "Característiques de la la barra d'estat"
#: ../extensions/statusbar-features.c:260
msgid "Easily toggle features on web pages on and off"
-msgstr "Activa o desactiva fàcilment funcionalitats en planes web"
+msgstr "Activa o desactiva fàcilment funcionalitats en les pàgines web"
#: ../extensions/tab-panel.c:588 ../extensions/tab-panel.c:677
msgid "Tab Panel"
@@ -2697,22 +2706,22 @@ msgstr "Mostra les pestanyes en un quadre vertical"
#: ../extensions/tabs-minimized.c:76
msgid "Only Icons on Tabs by default"
-msgstr "Per defecte només icones a les pestanyes"
+msgstr "Utilitza només icones a les com a predeterminat"
#: ../extensions/tabs-minimized.c:77
msgid "New tabs have no label by default"
-msgstr "Les noves pestanyes no tenen etiqueta per defecte"
+msgstr "Les pestanyes noves no tenen cap etiqueta predeterminada"
#: ../extensions/toolbar-editor.c:401
msgid "Customize Toolbar"
-msgstr "_Personalitza la barra d'eines"
+msgstr "Personalitza la barra d'eines"
#: ../extensions/toolbar-editor.c:417
msgid ""
"Select items to be displayed on the toolbar. Items can be reordered by drag "
"and drop."
msgstr ""
-"Selecciona els elements mostrats a la barra d'eines. Els elements poden ser "
+"Seleccioneu els elements mostrats a la barra d'eines. Els elements poden ser "
"ordenats arrossegant-los."
#: ../extensions/toolbar-editor.c:433
@@ -2733,7 +2742,7 @@ msgstr "Editor de la barra d'eines"
#: ../extensions/toolbar-editor.c:641
msgid "Easily edit the toolbar layout"
-msgstr "Edita fàcilment la distribució de la barra d'eines"
+msgstr "Edita la disposició de la barra d'eines"
#: ../katze/katze-http-cookies-sqlite.c:129
#, c-format
@@ -2756,16 +2765,16 @@ msgstr "Neteja les següents dades"
#: ../midori/midori-privatedata.c:169
msgid "Last open _tabs"
-msgstr "Mostra les darreres _pestanyes obertes"
+msgstr "Mostra les darreres pes_tanyes obertes"
#: ../midori/midori-privatedata.c:195
msgid "Clear private data when _quitting Midori"
-msgstr "Neteja les dades provades al _sortir de Midori"
+msgstr "Neteja les dades provades al _sortir del Midori"
#. i18n: Logins and passwords in websites and web forms
#: ../midori/midori-privatedata.c:318
msgid "Saved logins and _passwords"
-msgstr "Noms d'usuari i contra_senyes guardats"
+msgstr "Noms d'usuari i _contrasenyes desats"
#: ../midori/midori-privatedata.c:320
msgid "Cookies and Website data"
@@ -2773,11 +2782,11 @@ msgstr "Galetes i informació de llocs web"
#: ../midori/midori-privatedata.c:325
msgid "Website icons"
-msgstr "Icones de llocs webs"
+msgstr "Icones dels llocs web"
#: ../midori/midori-viewcompletion.vala:18
msgid "Open tabs"
-msgstr ""
+msgstr "Obre pestanyes"
#: ../midori/midori-viewcompletion.vala:80
msgid "More open tabs…"
@@ -2792,7 +2801,7 @@ msgstr "No s'ha pogut buidar l'historial: %s\n"
#: ../midori/midori-history.c:122
#, c-format
msgid "Failed to remove old history items: %s\n"
-msgstr "No s'han pogut eliminar els elements antics de l'historial: %s\n"
+msgstr "No s'han pogut suprimir els elements antics de l'historial: %s\n"
#: ../midori/midori-bookmarks.c:60
#, c-format
@@ -2861,7 +2870,7 @@ msgstr "No s'ha pogut desar la sessió. %s"
#: ../midori/midori-frontend.c:126
#, c-format
msgid "The trash couldn't be saved. %s"
-msgstr "No s'han pogut desar les escombraries. %s"
+msgstr "No s'han pogut desar les pestanyes tancades recentment. %s"
#: ../midori/midori-frontend.c:334
#, c-format
@@ -2871,19 +2880,19 @@ msgstr ""
#: ../midori/midori-frontend.c:343
msgid "Modify _preferences"
-msgstr "Modificació de les _preferències"
+msgstr "Modifica les _preferències"
#: ../midori/midori-frontend.c:347
msgid "Disable all _extensions"
-msgstr "Inhabilita totes les _extensions"
+msgstr "Desactiva totes les _extensions"
#: ../midori/midori-frontend.c:356
msgid "Show a dialog after Midori crashed"
-msgstr "Mostra un diàleg quan Midori falli"
+msgstr "Mostra un diàleg quan el Midori falli"
#: ../midori/midori-frontend.c:361
msgid "Discard old tabs"
-msgstr "Descarta pestanyes velles"
+msgstr "Descarta les pestanyes velles"
#: ../midori/midori-frontend.c:369
msgid "Show last crash _log"
@@ -2895,17 +2904,18 @@ msgstr ""
#: ../midori/midori-frontend.c:460
msgid "An instance of Midori is already running but not responding.\n"
-msgstr "Ja s'està executant una altra instància de Midori, però no respon.\n"
+msgstr ""
+"Ja s'està executant una altra instància del Midori, però no respon.\n"
#: ../midori/midori-frontend.c:493
#, c-format
msgid "Bookmarks couldn't be loaded: %s\n"
-msgstr "No s'ha pogut carregar les adreces d'interès: %s\n"
+msgstr "No s'han pogut carregar les adreces d'interès: %s\n"
#: ../midori/midori-frontend.c:524
#, c-format
msgid "The trash couldn't be loaded: %s\n"
-msgstr "No s'han pogut carregar les escombraries: %s\n"
+msgstr "No s'han pogut carregar les pestanyes tancades recentment. %s\n"
#: ../midori/midori-frontend.c:532
#, c-format
@@ -2933,7 +2943,7 @@ msgstr ""
#: ../extensions/cookie-permissions/cookie-permission-manager-preferences-window.c:707
#: ../extensions/cookie-permissions/cookie-permission-manager.c:1112
msgid "Accept"
-msgstr ""
+msgstr "Accepta"
#: ../extensions/cookie-permissions/cookie-permission-manager-preferences-window.c:250
#: ../extensions/cookie-permissions/cookie-permission-manager-preferences-window.c:709
@@ -2945,7 +2955,7 @@ msgstr ""
#: ../extensions/cookie-permissions/cookie-permission-manager-preferences-window.c:711
#: ../extensions/cookie-permissions/cookie-permission-manager.c:1114
msgid "Block"
-msgstr ""
+msgstr "Bloqueja"
#: ../extensions/cookie-permissions/cookie-permission-manager-preferences-window.c:300
#: ../extensions/cookie-permissions/cookie-permission-manager.c:151
@@ -3000,15 +3010,15 @@ msgstr ""
#: ../extensions/cookie-permissions/cookie-permission-manager-preferences-window.c:740
#: ../extensions/cookie-permissions/cookie-permission-manager.c:552
msgid "Domain"
-msgstr ""
+msgstr "Domini"
#: ../extensions/cookie-permissions/cookie-permission-manager-preferences-window.c:748
msgid "Policy"
-msgstr ""
+msgstr "Polítiques"
#: ../extensions/cookie-permissions/cookie-permission-manager-preferences-window.c:777
msgid "Delete _all"
-msgstr ""
+msgstr "Suprimeix-ho _tot"
#. Add "ask-for-unknown-policy" checkbox
#: ../extensions/cookie-permissions/cookie-permission-manager-preferences-window.c:786
@@ -3027,7 +3037,7 @@ msgstr ""
#: ../extensions/cookie-permissions/cookie-permission-manager.c:100
msgid "Reason"
-msgstr ""
+msgstr "Motiu"
#: ../extensions/cookie-permissions/cookie-permission-manager.c:140
#, c-format
@@ -3072,7 +3082,7 @@ msgstr ""
#: ../extensions/cookie-permissions/cookie-permission-manager.c:527
msgid "_Accept"
-msgstr ""
+msgstr "_Accepta"
#: ../extensions/cookie-permissions/cookie-permission-manager.c:528
msgid "Accept for this _session"
@@ -3088,11 +3098,11 @@ msgstr ""
#: ../extensions/cookie-permissions/cookie-permission-manager.c:559
msgid "Path"
-msgstr ""
+msgstr "Ruta"
#: ../extensions/cookie-permissions/cookie-permission-manager.c:573
msgid "Value"
-msgstr ""
+msgstr "Valor"
#: ../extensions/cookie-permissions/cookie-permission-manager.c:584
msgid "Expire date"
@@ -3142,7 +3152,7 @@ msgstr ""
#: ../extensions/cookie-permissions/cookie-permission-manager.c:1111
msgid "Undetermined"
-msgstr ""
+msgstr "Sense determinar"
#: ../extensions/cookie-permissions/main.c:62
msgid "Cookie Security Manager"
@@ -3190,7 +3200,7 @@ msgstr ""
#: ../extensions/apps.vala:144
#, c-format
msgid "Midori (%s)"
-msgstr ""
+msgstr "Midori (%s)"
#: ../extensions/apps.vala:149
msgid "New _App"
@@ -3235,7 +3245,7 @@ msgstr "Copia la _localització de l'enllaç"
#: ../extensions/transfers.vala:431
#, c-format
msgid "The file '<b>%s</b>' has been downloaded."
-msgstr "S'ha descarregat el fitxer «<b>%s</b>»."
+msgstr "S'ha baixat el fitxer «<b>%s</b>»."
#: ../extensions/transfers.vala:433
#, c-format
@@ -3248,15 +3258,15 @@ msgstr "Transferència finalitzada"
#: ../extensions/transfers.vala:484 ../extensions/transfers.vala:485
msgid "Some files are being downloaded"
-msgstr "S'estan descarregant fitxers"
+msgstr "S'estan baixant fitxers"
#: ../extensions/transfers.vala:487
msgid "_Quit Midori"
-msgstr "_Sortir de Midori"
+msgstr "_Surt del Midori"
#: ../extensions/transfers.vala:489
msgid "The transfers will be cancelled if Midori quits."
-msgstr "Les transferències es cancel·laran si se surt de Midori."
+msgstr "Les transferències es cancel·laran si surtiu del Midori."
#: ../extensions/transfers.vala:538
msgid "Transfer Manager"
diff --git a/po/cs.po b/po/cs.po
index 8b5617b4..c01ffc08 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -16,8 +16,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:21+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:16+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"X-Poedit-Country: CZECH REPUBLIC\n"
"Language: \n"
"X-Poedit-Language: Czech\n"
diff --git a/po/cy.po b/po/cy.po
index 41dfe318..27184e25 100644
--- a/po/cy.po
+++ b/po/cy.po
@@ -16,8 +16,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : (n != 8 && n != 11) ? "
"2 : 3;\n"
-"X-Launchpad-Export-Date: 2013-09-06 04:49+0000\n"
-"X-Generator: Launchpad (build 16760)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:18+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/da.po b/po/da.po
index 525690ef..c1448a84 100644
--- a/po/da.po
+++ b/po/da.po
@@ -16,8 +16,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-07-30 04:37+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:16+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"X-Poedit-Country: Denmark\n"
"Language: da\n"
"X-Poedit-Language: Danish\n"
diff --git a/po/de.po b/po/de.po
index ec9838cb..64ca0769 100644
--- a/po/de.po
+++ b/po/de.po
@@ -9,15 +9,15 @@ msgstr ""
"Project-Id-Version: midori 0.3.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-08-24 19:12+0000\n"
-"Last-Translator: Alexander Wilms <Unknown>\n"
+"PO-Revision-Date: 2014-01-22 10:26+0000\n"
+"Last-Translator: WebKit Team <Unknown>\n"
"Language-Team: German <de@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-08-25 04:36+0000\n"
-"X-Generator: Launchpad (build 16738)\n"
+"X-Launchpad-Export-Date: 2014-01-23 05:16+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: de\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
@@ -31,7 +31,7 @@ msgstr "Web-Browser"
#: ../data/midori.desktop.in.h:3
msgid "Midori Web Browser"
-msgstr "Midori Web-Browser"
+msgstr "Midori Web­brow­ser"
#: ../data/midori.desktop.in.h:4
msgid "Browse the Web"
@@ -542,11 +542,13 @@ msgstr ""
" Eduard Gotwig https://launchpad.net/~gotwig\n"
" Ghenrik https://launchpad.net/~ghenrik-deactivatedaccount\n"
" Mathias Dietrich https://launchpad.net/~theghost\n"
+" Moritz Gehlhaar https://launchpad.net/~geoextra\n"
" Phillip Sz https://launchpad.net/~phillip-sz\n"
" Pierre Bender https://launchpad.net/~pierre-bender\n"
" Sebastian Schlatow https://launchpad.net/~buzz-dee\n"
" Simeon https://launchpad.net/~simeon5\n"
" Thomas Pitlik https://launchpad.net/~thomaspitlik\n"
+" Tobias Bannert https://launchpad.net/~toba\n"
" WebKit Team https://launchpad.net/~webkit-team\n"
" grrrk https://launchpad.net/~grrrk"
diff --git a/po/el.po b/po/el.po
index 3edfffda..0b8e4427 100644
--- a/po/el.po
+++ b/po/el.po
@@ -16,8 +16,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-08-26 04:38+0000\n"
-"X-Generator: Launchpad (build 16738)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:17+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"X-Poedit-Country: GREECE\n"
"Language: el\n"
"X-Poedit-Language: Greek\n"
diff --git a/po/en_AU.po b/po/en_AU.po
index 904190f7..c1a8b739 100644
--- a/po/en_AU.po
+++ b/po/en_AU.po
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-08-16 04:47+0000\n"
-"X-Generator: Launchpad (build 16723)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:19+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/en_CA.po b/po/en_CA.po
index 54c3ed69..9a54d950 100644
--- a/po/en_CA.po
+++ b/po/en_CA.po
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-08-24 04:37+0000\n"
-"X-Generator: Launchpad (build 16738)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:19+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/en_GB.po b/po/en_GB.po
index 92ffa082..1a52eafd 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -16,8 +16,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-08-12 04:36+0000\n"
-"X-Generator: Launchpad (build 16723)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:19+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: \n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
diff --git a/po/eo.po b/po/eo.po
index 011654c9..a9a3e569 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:21+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:16+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: eo\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
diff --git a/po/es.po b/po/es.po
index 190d67b9..42911e78 100644
--- a/po/es.po
+++ b/po/es.po
@@ -13,15 +13,15 @@ msgstr ""
"Project-Id-Version: midori 0.1.7\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-08-15 08:02+0000\n"
-"Last-Translator: jesusiniesta <jesus.iniesta.03@gmail.com>\n"
+"PO-Revision-Date: 2013-12-11 12:57+0000\n"
+"Last-Translator: WebKit Team <Unknown>\n"
"Language-Team: Spanish <xfce-i18n@xfce.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-08-16 04:47+0000\n"
-"X-Generator: Launchpad (build 16723)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:18+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: es\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
@@ -114,7 +114,7 @@ msgstr "Ejecutar con gdb y guardar una traza inversa cuando ocurra un fallo"
#: ../midori/main.c:95
msgid "Run the specified filename as javascript"
-msgstr "Ejecutar el nombre de archivo especificado como JavaScript"
+msgstr "Ejecutar el archivo especificado como JavaScript"
#: ../midori/main.c:97
msgid "Take a snapshot of the specified URI"
@@ -540,16 +540,18 @@ msgstr ""
"Abel Martín <abel.martin.ruiz@gmail.com>\n"
"\n"
"Launchpad Contributions:\n"
-" Adolfo Jayme Barrientos https://launchpad.net/~fitoschido\n"
+" Adolfo Jayme https://launchpad.net/~fitoschido\n"
" Alfredo Hernández https://launchpad.net/~aldomann\n"
" Andres Sanchez https://launchpad.net/~afsanchez93-deactivatedaccount\n"
" Carkis https://launchpad.net/~carlosdark\n"
" Chipong Luo https://launchpad.net/~chipong-l\n"
" Christopher https://launchpad.net/~cdhornb\n"
+" Derek Basaletti https://launchpad.net/~derek-basaletti\n"
" Diego Prieto https://launchpad.net/~bboyastalamuerte\n"
" Ezequiel Sapo https://launchpad.net/~ezesapo\n"
" Ivan Diaz https://launchpad.net/~saisyukusanagi\n"
" Jeferson Mendoza https://launchpad.net/~jefex93\n"
+" Jesús David García Madriz https://launchpad.net/~jesusgarciamadriz\n"
" Juan David Angarita https://launchpad.net/~jangarita11\n"
" Kalprestito@Yahoo.Es https://launchpad.net/~kalprestito\n"
" Kern Goldstein https://launchpad.net/~kern-goldstein\n"
@@ -558,6 +560,7 @@ msgstr ""
" R. Santana https://launchpad.net/~robermad1986\n"
" Sergio https://launchpad.net/~oigres200-o\n"
" Walter Beckerleg https://launchpad.net/~spayk-99\n"
+" WebKit Team https://launchpad.net/~webkit-team\n"
" dbinary https://launchpad.net/~luis-luimarin\n"
" ghas https://launchpad.net/~agghas\n"
" jesusiniesta https://launchpad.net/~jesus-iniesta"
diff --git a/po/et.po b/po/et.po
index 42b7116a..67f03e94 100644
--- a/po/et.po
+++ b/po/et.po
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-08-17 04:35+0000\n"
-"X-Generator: Launchpad (build 16723)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:16+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: Estonian\n"
"X-Poedit-Language: Estonian\n"
diff --git a/po/eu.po b/po/eu.po
index e1adfcb3..759ade31 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:21+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:16+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/fa.po b/po/fa.po
index 122e8efe..1c073776 100644
--- a/po/fa.po
+++ b/po/fa.po
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2013-08-21 04:38+0000\n"
-"X-Generator: Launchpad (build 16731)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:18+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/fi.po b/po/fi.po
index 6ca3b105..a968c8ec 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -16,8 +16,8 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-08-14 04:39+0000\n"
-"X-Generator: Launchpad (build 16723)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:16+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/fr.po b/po/fr.po
index 56659829..9151e532 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -21,8 +21,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2013-08-29 04:39+0000\n"
-"X-Generator: Launchpad (build 16738)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:16+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: fr\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
diff --git a/po/gd.po b/po/gd.po
index 6a0e3e06..a6a99248 100644
--- a/po/gd.po
+++ b/po/gd.po
@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: midori 0.3.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-05-20 13:24+0000\n"
+"PO-Revision-Date: 2013-09-30 07:48+0000\n"
"Last-Translator: Christian Dywan <christian@twotoasts.de>\n"
"Language-Team: German <de@li.org>\n"
"MIME-Version: 1.0\n"
@@ -17,8 +17,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
"(n > 2 && n < 20) ? 2 : 3;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:21+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:17+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: de\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
@@ -533,7 +533,7 @@ msgstr ""
"\n"
"Launchpad Contributions:\n"
" Christian Dywan https://launchpad.net/~kalikiana\n"
-" alasdair caimbeul https://launchpad.net/~alexd"
+" alasdair caimbeul https://launchpad.net/~alexd-deactivatedaccount"
#: ../midori/midori-browser.c:5243
msgid "_File"
diff --git a/po/gl.po b/po/gl.po
index 08c51ae5..b5fef439 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -18,8 +18,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-08-10 04:42+0000\n"
-"X-Generator: Launchpad (build 16723)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:17+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: gl\n"
"X-Poedit-Language: Galician\n"
diff --git a/po/he.po b/po/he.po
index b0196611..8f917343 100644
--- a/po/he.po
+++ b/po/he.po
@@ -16,8 +16,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:21+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:17+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: he\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
diff --git a/po/hr.po b/po/hr.po
index 03b1b01c..454e815a 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: Midori\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-06-02 11:58+0000\n"
+"PO-Revision-Date: 2013-10-30 09:57+0000\n"
"Last-Translator: zvacet <ikoli@yahoo.com>\n"
"Language-Team: Croatian <>\n"
"MIME-Version: 1.0\n"
@@ -17,8 +17,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:22+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:18+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: hr\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
@@ -60,7 +60,7 @@ msgstr "Midori privatno pretraživanje"
#: ../data/midori-private.desktop.in.h:2 ../midori/midori-view.c:4106
msgid "Private Browsing"
-msgstr "(Privatno pretraživanje)"
+msgstr "Privatno pretraživanje"
#: ../data/midori-private.desktop.in.h:3
msgid "Open a new private browsing window"
@@ -113,7 +113,7 @@ msgstr "Pokreni naznačeno ime datoteke kao javascript"
#: ../midori/main.c:97
msgid "Take a snapshot of the specified URI"
-msgstr ""
+msgstr "Uzmi snimku navedenog URI"
#: ../midori/main.c:99
msgid "Execute the specified command"
@@ -288,15 +288,15 @@ msgstr "Zabilješke"
#: ../midori/midori-browser.c:949
msgid "New Folder"
-msgstr ""
+msgstr "Novi Direktorij"
#: ../midori/midori-browser.c:949
msgid "Edit Folder"
-msgstr ""
+msgstr "Uredi Direktorij"
#: ../midori/midori-browser.c:951
msgid "New Bookmark"
-msgstr ""
+msgstr "Nova zabilješka"
#: ../midori/midori-browser.c:951
msgid "Edit Bookmark"
@@ -304,11 +304,11 @@ msgstr ""
#: ../midori/midori-browser.c:973
msgid "Type a name for this bookmark, and choose where to keep it."
-msgstr ""
+msgstr "Ime za ovu zabilješku, i izaberite gdje će te je držati."
#: ../midori/midori-browser.c:975
msgid "Type a name for this folder, and choose where to keep it."
-msgstr ""
+msgstr "Upišite ime za ovu mapu, i odaberite gdje ćete je držati."
#: ../midori/midori-browser.c:1030
msgid "Add to _Speed Dial"
@@ -316,7 +316,7 @@ msgstr "Dodaj u _brzo biranje"
#: ../midori/midori-browser.c:1039
msgid "Show in Bookmarks _Bar"
-msgstr ""
+msgstr "Pokaži u kartici _zabilješki"
#: ../midori/midori-browser.c:1047
msgid "Run as _web application"
@@ -518,6 +518,8 @@ msgstr ""
"\n"
"Launchpad Contributions:\n"
" Karlo Horvat https://launchpad.net/~karlo-puselj\n"
+" WebKit Team https://launchpad.net/~webkit-team\n"
+" freedomrun https://launchpad.net/~freedomrun\n"
" gogo https://launchpad.net/~trebelnik-stefina\n"
" nuker https://launchpad.net/~molkusinoki\n"
" zvacet https://launchpad.net/~ivicakolic"
@@ -528,7 +530,7 @@ msgstr "_Datoteka"
#: ../midori/midori-browser.c:5246
msgid "Open a new window"
-msgstr "Otvori u novom prozoru"
+msgstr ""
#: ../midori/midori-browser.c:5249
msgid "Open a new tab"
@@ -697,19 +699,19 @@ msgstr "Dodaj novu _mapu"
#: ../midori/midori-browser.c:5406
msgid "_Import bookmarks…"
-msgstr ""
+msgstr "_Uvezi zabilješke..."
#: ../midori/midori-browser.c:5409
msgid "_Export bookmarks…"
-msgstr ""
+msgstr "_Izvezi zabilješke..."
#: ../midori/midori-browser.c:5412
msgid "_Manage Search Engines…"
-msgstr ""
+msgstr "_Upravljaj tražilicama..."
#: ../midori/midori-browser.c:5415
msgid "_Clear Private Data…"
-msgstr ""
+msgstr "_Očisti privatne podatke..."
#: ../midori/midori-browser.c:5418
msgid "_Inspect Page"
@@ -1129,12 +1131,12 @@ msgstr "%s želi znati vašu lokaciju."
#: ../midori/midori-view.c:1250
#, c-format
msgid "'%s' can't be found"
-msgstr ""
+msgstr "'%s' ne može biti nađen"
#: ../midori/midori-view.c:1251
#, c-format
msgid "The page '%s' couldn't be loaded:"
-msgstr ""
+msgstr "Stranica '%s' se ne može učitati:"
#: ../midori/midori-view.c:1255
msgid "Check the address for typos"
@@ -1148,7 +1150,7 @@ msgstr ""
#: ../midori/midori-view.c:1257
msgid "Verify that your network settings are correct"
-msgstr ""
+msgstr "Provjerite da su vaše mrežne postavke ispravne"
#: ../midori/midori-view.c:1261
msgid "Try Again"
@@ -1183,7 +1185,7 @@ msgstr ""
#: ../midori/midori-view.c:2472
msgid "Open _Link"
-msgstr ""
+msgstr "Otvori _poveznicu"
#: ../midori/midori-view.c:2478
msgid "Open Link in New _Tab"
@@ -1799,7 +1801,7 @@ msgstr "Tražilice ne mogu biti spremljene. %s"
#: ../midori/midori-historycompletion.vala:17
msgid "Bookmarks and History"
-msgstr ""
+msgstr "Zabilješke i povijest"
#: ../midori/midori-historycompletion.vala:54
#, c-format
@@ -1876,16 +1878,18 @@ msgstr "Neuspjeh u dodavanju stavki zabilješki: %s\n"
#, c-format
msgid "%d bookmark"
msgid_plural "%d bookmarks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d zabilješka"
+msgstr[1] "%d zabilješke"
+msgstr[2] "%d zabilješki"
#. i18n: [n] subfolder(s)
#: ../panels/midori-bookmarks.c:506
#, c-format
msgid "%d subfolder"
msgid_plural "%d subfolders"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d pšodmapa"
+msgstr[1] "%d podmape"
+msgstr[2] "%d podmapa"
#. i18n: Empty folder
#: ../panels/midori-bookmarks.c:534
@@ -1897,19 +1901,19 @@ msgstr ""
#: ../panels/midori-bookmarks.c:537
#, c-format
msgid "Folder containing %s and no bookmark"
-msgstr ""
+msgstr "Mapa sadrži %s i njednu zabilješku"
#. i18n: Folder containing [[n] bookmark(s)]
#: ../panels/midori-bookmarks.c:541
#, c-format
msgid "Folder containing %s"
-msgstr ""
+msgstr "Mapa sadrži %s"
#. i18n: Folder containing [[n] bookmark(s)] and [[n] folder(s)]
#: ../panels/midori-bookmarks.c:544
#, c-format
msgid "Folder containing %s and %s"
-msgstr ""
+msgstr "Mapa sadrži %s i %s"
#. i18n: Bookmark leading to: [bookmark uri]
#: ../panels/midori-bookmarks.c:555
@@ -1932,7 +1936,7 @@ msgstr ""
#: ../panels/midori-bookmarks.c:627
#, c-format
msgid "Failed to update bookmark: %s\n"
-msgstr ""
+msgstr "Neuspjelo ažuriranje zabilješki: %s\n"
#: ../panels/midori-bookmarks.c:686
msgid "Edit the selected bookmark"
@@ -2704,7 +2708,7 @@ msgstr "Jednostavno uređivanje izgleda alatnih traka"
#: ../katze/katze-http-cookies-sqlite.c:129
#, c-format
msgid "Failed to load cookies\n"
-msgstr ""
+msgstr "Neuspjelo učitavanje kolačića\n"
#. FIXME: granite: should return GtkWidget* like GTK+
#. i18n: Dialog: Clear Private Data, in the Tools menu
@@ -2747,7 +2751,7 @@ msgstr "Otvori kartice"
#: ../midori/midori-viewcompletion.vala:80
msgid "More open tabs…"
-msgstr ""
+msgstr "Još otvorenih kartica..."
#: ../midori/midori-history.c:25
#, c-format
@@ -2763,7 +2767,7 @@ msgstr "Neuspjelo uklanjanje starih stavki povijesti: %s\n"
#: ../midori/midori-bookmarks.c:60
#, c-format
msgid "Failed to remove bookmark item: %s\n"
-msgstr ""
+msgstr "Neuspjelo uklanjanje stavke zabilješke:%s\n"
#: ../midori/midori-bookmarks.c:106
msgid "failed to ATTACH old db"
@@ -3125,7 +3129,7 @@ msgstr ""
#: ../extensions/apps.vala:84
msgid "Launcher created"
-msgstr ""
+msgstr "Pokretač je napravljrn"
#: ../extensions/apps.vala:85
#, c-format
@@ -3135,11 +3139,11 @@ msgstr ""
#: ../extensions/apps.vala:88 ../extensions/apps.vala:90
#, c-format
msgid "Failed to create new launcher: %s"
-msgstr ""
+msgstr "Neuspjelo stvaranje novog pokretača:%s"
#: ../extensions/apps.vala:89
msgid "Error creating launcher"
-msgstr ""
+msgstr "Greška pri stvaranju pokretača"
#: ../extensions/apps.vala:126
msgid "Applications"
@@ -3147,20 +3151,20 @@ msgstr "_Programi"
#: ../extensions/apps.vala:134
msgid "New _Profile"
-msgstr ""
+msgstr "Novi _profil"
#: ../extensions/apps.vala:135
msgid "Creates a new, independant profile and a launcher"
-msgstr ""
+msgstr "Stvara novi, nezavisni profil i pokretač"
#: ../extensions/apps.vala:144
#, c-format
msgid "Midori (%s)"
-msgstr ""
+msgstr "Midori (%s)"
#: ../extensions/apps.vala:149
msgid "New _App"
-msgstr ""
+msgstr "Novi _program"
#: ../extensions/apps.vala:150
msgid "Creates a new app for a specific site"
@@ -3168,7 +3172,7 @@ msgstr ""
#: ../extensions/apps.vala:175
msgid "Error launching"
-msgstr ""
+msgstr "Greška pri pokretanju"
#: ../extensions/apps.vala:384
msgid "Create _Launcher"
@@ -3206,7 +3210,7 @@ msgstr "Datoteka '<b>%s</b>' je preuzeta."
#: ../extensions/transfers.vala:433
#, c-format
msgid "'<b>%s</b>' and %d other files have been downloaded."
-msgstr ""
+msgstr "'<b>%s</b>' i %d ostale datoteke su preuzete."
#: ../extensions/transfers.vala:434
msgid "Transfer completed"
diff --git a/po/hu.po b/po/hu.po
index 0b7b3fd7..fb1ad67f 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -9,15 +9,15 @@ msgstr ""
"Project-Id-Version: midori master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-06-02 11:54+0000\n"
-"Last-Translator: Christian Dywan <christian@twotoasts.de>\n"
+"PO-Revision-Date: 2013-12-29 11:34+0000\n"
+"Last-Translator: Úr Balázs <urbalazs@gmail.com>\n"
"Language-Team: Magyar <gnome-hu-list at gnome dot org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:21+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:17+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: \n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
@@ -51,7 +51,7 @@ msgstr "Új ablak"
#: ../data/midori.desktop.in.h:8
msgid "New Private Browsing Window"
-msgstr "Új privát böngészési ablak megnyitása"
+msgstr "Új privát böngészési ablak"
#: ../data/midori-private.desktop.in.h:1
msgid "Midori Private Browsing"
@@ -106,6 +106,7 @@ msgstr "Diagnosztikai ablak megjelenítése"
#: ../midori/main.c:93
msgid "Run within gdb and save a backtrace on crash"
msgstr ""
+"Futtatás a gdb-ben és a visszakövetési információk mentése összeomláskor"
#: ../midori/main.c:95
msgid "Run the specified filename as javascript"
@@ -243,7 +244,7 @@ msgstr "Ugrás a következő aloldalra"
#: ../midori/midori-browser.c:345
msgid "Web Search…"
-msgstr ""
+msgstr "Keresés a weben…"
#: ../midori/midori-browser.c:449 ../midori/midori-browser.c:5326
#: ../midori/midori-browser.c:5335
@@ -288,27 +289,28 @@ msgstr "Könyvjelzők"
#: ../midori/midori-browser.c:949
msgid "New Folder"
-msgstr ""
+msgstr "Új mappa"
#: ../midori/midori-browser.c:949
msgid "Edit Folder"
-msgstr ""
+msgstr "Mappa szerkesztése"
#: ../midori/midori-browser.c:951
msgid "New Bookmark"
-msgstr ""
+msgstr "Új könyvjelző"
#: ../midori/midori-browser.c:951
msgid "Edit Bookmark"
-msgstr ""
+msgstr "Könyvjelző szerkesztése"
#: ../midori/midori-browser.c:973
msgid "Type a name for this bookmark, and choose where to keep it."
msgstr ""
+"Adjon nevet a könyvjelzőnek, és válassza ki, hogy hol szeretné tárolni."
#: ../midori/midori-browser.c:975
msgid "Type a name for this folder, and choose where to keep it."
-msgstr ""
+msgstr "Adjon nevet a mappának, és válassza ki, hogy hol szeretné tárolni."
#: ../midori/midori-browser.c:1030
msgid "Add to _Speed Dial"
@@ -316,7 +318,7 @@ msgstr "Felvétel a _gyorstárcsázásba"
#: ../midori/midori-browser.c:1039
msgid "Show in Bookmarks _Bar"
-msgstr ""
+msgstr "Megjelenítés a _könyvjelzősávon"
#: ../midori/midori-browser.c:1047
msgid "Run as _web application"
@@ -531,12 +533,17 @@ msgstr ""
"Kelemen Gábor <kelemeng at gnome dot hu>\n"
"\n"
"Launchpad Contributions:\n"
+" Balazs Varga https://launchpad.net/~thebalu1\n"
" Chipong Luo https://launchpad.net/~chipong-l\n"
" Christian Dywan https://launchpad.net/~kalikiana\n"
" Cody Garver https://launchpad.net/~codygarver\n"
" Gabor Kelemen https://launchpad.net/~kelemeng\n"
" Gergely Szarka https://launchpad.net/~gszarka\n"
-" Rafael Ferreira https://launchpad.net/~rafael-f-f1"
+" Gyönki Bendegúz https://launchpad.net/~gyonkibendeguz\n"
+" Laszlo Espadas https://launchpad.net/~kardi-web\n"
+" Rafael Ferreira https://launchpad.net/~rafael-f-f1\n"
+" moonwatcher https://launchpad.net/~moonwatcher2k1\n"
+" Úr Balázs https://launchpad.net/~urbalazs"
#: ../midori/midori-browser.c:5243
msgid "_File"
@@ -713,19 +720,19 @@ msgstr "Új mappa _hozzáadása"
#: ../midori/midori-browser.c:5406
msgid "_Import bookmarks…"
-msgstr ""
+msgstr "_Könyvjelzők importálása…"
#: ../midori/midori-browser.c:5409
msgid "_Export bookmarks…"
-msgstr ""
+msgstr "_Könyvjelzők exportálása…"
#: ../midori/midori-browser.c:5412
msgid "_Manage Search Engines…"
-msgstr ""
+msgstr "Kereső_motorok kezelése…"
#: ../midori/midori-browser.c:5415
msgid "_Clear Private Data…"
-msgstr ""
+msgstr "_Személyes adatok törlése…"
#: ../midori/midori-browser.c:5418
msgid "_Inspect Page"
@@ -1150,40 +1157,42 @@ msgstr "%s tudni szeretné az Ön tartózkodási helyét."
#: ../midori/midori-view.c:1250
#, c-format
msgid "'%s' can't be found"
-msgstr ""
+msgstr "„%s” nem található"
#: ../midori/midori-view.c:1251
#, c-format
msgid "The page '%s' couldn't be loaded:"
-msgstr ""
+msgstr "A(z) „%s” oldal nem tölthető be:"
#: ../midori/midori-view.c:1255
msgid "Check the address for typos"
-msgstr ""
+msgstr "Ellenőrizze, hogy jól írta-e be a címet"
#: ../midori/midori-view.c:1256
msgid ""
"Make sure that an ethernet cable is plugged in or the wireless card is "
"activated"
msgstr ""
+"Győződjön meg arról, hogy van-e ethernet kábel csatlakoztatva vagy a vezeték "
+"nélküli kártya aktiválva van-e"
#: ../midori/midori-view.c:1257
msgid "Verify that your network settings are correct"
-msgstr ""
+msgstr "Ellenőrizze, hogy a hálózati beállítások helyesek-e"
#: ../midori/midori-view.c:1261
msgid "Try Again"
-msgstr ""
+msgstr "Próbálja újra"
#: ../midori/midori-view.c:1386
#, c-format
msgid "Oops - %s"
-msgstr ""
+msgstr "Upsz - %s"
#: ../midori/midori-view.c:1387
#, c-format
msgid "Something went wrong with '%s'."
-msgstr ""
+msgstr "Valami probléma van a következővel: „%s”."
#: ../midori/midori-view.c:1389
msgid "Try again"
@@ -1204,7 +1213,7 @@ msgstr "Elem _vizsgálata"
#: ../midori/midori-view.c:2472
msgid "Open _Link"
-msgstr ""
+msgstr "_Hivatkozás megnyitása"
#: ../midori/midori-view.c:2478
msgid "Open Link in New _Tab"
@@ -1232,7 +1241,7 @@ msgstr "_Mentés másként…"
#: ../midori/midori-view.c:2507
msgid "Open _Image in New Window"
-msgstr ""
+msgstr "_Kép megnyitása új ablakban"
#: ../midori/midori-view.c:2508
msgid "Open _Image in New Tab"
@@ -1366,7 +1375,7 @@ msgstr ""
#: ../midori/midori-view.c:4208
msgid "Page loading delayed:"
-msgstr ""
+msgstr "Oldalbetöltés késleltetve:"
#: ../midori/midori-view.c:4209
msgid "Loading delayed either due to a recent crash or startup preferences."
@@ -1615,11 +1624,11 @@ msgstr "A parancsfájlok megnyithatnak-e automatikusan felugró ablakokat"
#: ../midori/midori-preferences.c:406
msgid "Default Zoom Level"
-msgstr ""
+msgstr "Alapértelmezett nagyítási szint"
#: ../midori/midori-preferences.c:410
msgid "Initial factor to enlarge newly opened tabs by"
-msgstr ""
+msgstr "Az újonnan megnyitott lapok kezdeti nagyítási tényezője"
#: ../midori/midori-preferences.c:414
msgid "Preferred languages"
@@ -1703,7 +1712,7 @@ msgstr "Port"
#: ../midori/midori-preferences.c:497
msgid "Supported proxy types:"
-msgstr ""
+msgstr "Támogatott proxytípusok:"
#. TODO: Preserve page icons of search engines and merge privacy items
#: ../midori/midori-preferences.c:515 ../midori/midori-privatedata.c:323
@@ -1829,7 +1838,7 @@ msgstr "A keresőmotorok nem menthetők. %s"
#: ../midori/midori-historycompletion.vala:17
msgid "Bookmarks and History"
-msgstr ""
+msgstr "Könyvjelzők és előzmények"
#: ../midori/midori-historycompletion.vala:54
#, c-format
@@ -1906,63 +1915,63 @@ msgstr "A könyvjelzőelem hozzáadása meghiúsult: %s\n"
#, c-format
msgid "%d bookmark"
msgid_plural "%d bookmarks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d könyvjelző"
+msgstr[1] "%d könyvjelző"
#. i18n: [n] subfolder(s)
#: ../panels/midori-bookmarks.c:506
#, c-format
msgid "%d subfolder"
msgid_plural "%d subfolders"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d almappa"
+msgstr[1] "%d almappa"
#. i18n: Empty folder
#: ../panels/midori-bookmarks.c:534
#, c-format
msgid "Empty folder"
-msgstr ""
+msgstr "Üres mapa"
#. i18n: Folder containing [[n] folder(s)] and no bookmark
#: ../panels/midori-bookmarks.c:537
#, c-format
msgid "Folder containing %s and no bookmark"
-msgstr ""
+msgstr "A mappa tartalma %s és nincs könyvjelző"
#. i18n: Folder containing [[n] bookmark(s)]
#: ../panels/midori-bookmarks.c:541
#, c-format
msgid "Folder containing %s"
-msgstr ""
+msgstr "A mappa tartalma %s"
#. i18n: Folder containing [[n] bookmark(s)] and [[n] folder(s)]
#: ../panels/midori-bookmarks.c:544
#, c-format
msgid "Folder containing %s and %s"
-msgstr ""
+msgstr "A mappa tartalma %s és %s"
#. i18n: Bookmark leading to: [bookmark uri]
#: ../panels/midori-bookmarks.c:555
#, c-format
msgid "Bookmark leading to: %s"
-msgstr ""
+msgstr "A könyvjelző erre mutat: %s"
#. i18n: [[n] folder(s)] and no bookmark
#: ../panels/midori-bookmarks.c:569
#, c-format
msgid "%s and no bookmark"
-msgstr ""
+msgstr "%s és nincs könyvjelző"
#. i18n: [[n] bookmark(s)] and [[n] folder(s)]
#: ../panels/midori-bookmarks.c:575
#, c-format
msgid "%s and %s"
-msgstr ""
+msgstr "%s és %s"
#: ../panels/midori-bookmarks.c:627
#, c-format
msgid "Failed to update bookmark: %s\n"
-msgstr ""
+msgstr "Nem sikerült a könyvjelző frissítése: %s\n"
#: ../panels/midori-bookmarks.c:686
msgid "Edit the selected bookmark"
@@ -2640,7 +2649,7 @@ msgstr "Gyorsbillentyűk személyre szabása"
#: ../extensions/shortcuts.c:275
msgid "Customize Sh_ortcuts…"
-msgstr ""
+msgstr "_Gyorsbillentyűk személyre szabása…"
#: ../extensions/shortcuts.c:312
msgid "Shortcuts"
@@ -2796,7 +2805,7 @@ msgstr "A régi előzményelemek eltávolítása meghiúsult: %s\n"
#: ../midori/midori-bookmarks.c:60
#, c-format
msgid "Failed to remove bookmark item: %s\n"
-msgstr ""
+msgstr "Nem sikerült a könyvjelző eltávolítása: %s\n"
#: ../midori/midori-bookmarks.c:106
msgid "failed to ATTACH old db"
@@ -2817,7 +2826,7 @@ msgstr "sikertelen LEVÁLASZTÁS "
#: ../midori/midori-bookmarks.c:257
#, c-format
msgid "Couldn't setup bookmarks: %s\n"
-msgstr ""
+msgstr "Nem sikerült beállítani a könyvjelzőket: %s\n"
#: ../midori/midori-bookmarks.c:271
#, c-format
@@ -2867,6 +2876,8 @@ msgstr "A Kuka nem menthető. %s"
msgid ""
"Midori crashed the last time it was opened. You can report the problem at %s."
msgstr ""
+"A Midori összeomlott a legutóbbi megnyitáskor. Itt jelentheti a problémát: "
+"%s."
#: ../midori/midori-frontend.c:343
msgid "Modify _preferences"
@@ -2886,11 +2897,11 @@ msgstr "Régi lapok eldobása"
#: ../midori/midori-frontend.c:369
msgid "Show last crash _log"
-msgstr ""
+msgstr "A legutóbbi összeomlási _napló megjelenítése"
#: ../midori/midori-frontend.c:382
msgid "Run in _debugger"
-msgstr ""
+msgstr "Futtatás a _hibakeresőben"
#: ../midori/midori-frontend.c:460
msgid "An instance of Midori is already running but not responding.\n"
@@ -3085,7 +3096,7 @@ msgstr "Meg_tagadás"
#: ../extensions/cookie-permissions/cookie-permission-manager.c:530
msgid "Deny _this time"
-msgstr ""
+msgstr "Megtagadás _erre az alkalomra"
#: ../extensions/cookie-permissions/cookie-permission-manager.c:559
msgid "Path"
@@ -3105,7 +3116,7 @@ msgstr "Kiterjesztés példány"
#: ../extensions/cookie-permissions/cookie-permission-manager.c:1008
msgid "The Midori extension instance for this extension"
-msgstr ""
+msgstr "A Midori kiterjesztés példány ehhez a kiterjesztéshez"
#: ../extensions/cookie-permissions/cookie-permission-manager.c:1014
msgid "Application instance"
@@ -3113,7 +3124,7 @@ msgstr "Alkalmazás példány"
#: ../extensions/cookie-permissions/cookie-permission-manager.c:1015
msgid "The Midori application instance this extension belongs to"
-msgstr ""
+msgstr "Ehhez a kiterjesztéshez tartozó Midori alkalmazás példány"
#: ../extensions/cookie-permissions/cookie-permission-manager.c:1021
msgid "Database instance"
@@ -3122,14 +3133,16 @@ msgstr "Adatbázis példány"
#: ../extensions/cookie-permissions/cookie-permission-manager.c:1022
msgid "Pointer to sqlite database instance used by this extension"
msgstr ""
+"Ezen kiterjesztés által használt mutató az sqlite adatbázis példányra"
#: ../extensions/cookie-permissions/cookie-permission-manager.c:1027
msgid "Database path"
-msgstr ""
+msgstr "Adatbázis útvonala"
#: ../extensions/cookie-permissions/cookie-permission-manager.c:1028
msgid "Path to sqlite database instance used by this extension"
msgstr ""
+"Ezen kiterjesztés által használt útvonal az sqlite adatbázis példányhoz"
#: ../extensions/cookie-permissions/cookie-permission-manager.c:1034
msgid "Ask for unknown policy"
@@ -3156,54 +3169,55 @@ msgstr "Sütijogosultság kezelése oldalanként"
#: ../extensions/apps.vala:58
#, c-format
msgid "Failed to fetch application icon in %s: %s"
-msgstr ""
+msgstr "Nem sikerült letölteni az alkalmazásikont itt: %s: %s"
#: ../extensions/apps.vala:84
msgid "Launcher created"
-msgstr ""
+msgstr "Gyorsindító létrehozva"
#: ../extensions/apps.vala:85
#, c-format
msgid "You can now run <b>%s</b> from your launcher or menu"
msgstr ""
+"Most már lehetséges <b>%s</b> futtatása a gyorsindítóból vagy a menüből"
#: ../extensions/apps.vala:88 ../extensions/apps.vala:90
#, c-format
msgid "Failed to create new launcher: %s"
-msgstr ""
+msgstr "Nem sikerült az új gyorsindító létrehozása: %s"
#: ../extensions/apps.vala:89
msgid "Error creating launcher"
-msgstr ""
+msgstr "Hiba a gyorsindító létrehozásakor"
#: ../extensions/apps.vala:126
msgid "Applications"
-msgstr ""
+msgstr "Alkalmazások"
#: ../extensions/apps.vala:134
msgid "New _Profile"
-msgstr ""
+msgstr "Új _profil"
#: ../extensions/apps.vala:135
msgid "Creates a new, independant profile and a launcher"
-msgstr ""
+msgstr "Új, önálló profilt és egy gyorsindítót hoz létre"
#: ../extensions/apps.vala:144
#, c-format
msgid "Midori (%s)"
-msgstr ""
+msgstr "Midori (%s)"
#: ../extensions/apps.vala:149
msgid "New _App"
-msgstr ""
+msgstr "Új _alkalmazás"
#: ../extensions/apps.vala:150
msgid "Creates a new app for a specific site"
-msgstr ""
+msgstr "Egy új alkalmazást hoz létre egy megadott oldalhoz"
#: ../extensions/apps.vala:175
msgid "Error launching"
-msgstr ""
+msgstr "Hiba az indításkor"
#: ../extensions/apps.vala:384
msgid "Create _Launcher"
@@ -3211,11 +3225,11 @@ msgstr "_Parancsikon létrehozása"
#: ../extensions/apps.vala:430
msgid "Web App Manager"
-msgstr ""
+msgstr "Webalkalmazás kezelő"
#: ../extensions/apps.vala:431
msgid "Manage websites installed as applications"
-msgstr ""
+msgstr "Alkalmazásként telepített weboldalak kezelése"
#: ../extensions/transfers.vala:98
msgid "Transfers"
@@ -3241,7 +3255,7 @@ msgstr "A(z) „<b>%s</b>” fájl letöltve."
#: ../extensions/transfers.vala:433
#, c-format
msgid "'<b>%s</b>' and %d other files have been downloaded."
-msgstr ""
+msgstr "„<b>%s</b>” és %d egyéb fájl került letöltésre."
#: ../extensions/transfers.vala:434
msgid "Transfer completed"
@@ -3261,8 +3275,8 @@ msgstr "Az átvitel meg fog szakadni, ha kilép a Midoriból."
#: ../extensions/transfers.vala:538
msgid "Transfer Manager"
-msgstr ""
+msgstr "Átvitelkezelő"
#: ../extensions/transfers.vala:539
msgid "View downloaded files"
-msgstr ""
+msgstr "Letöltött fájlok megtekintése"
diff --git a/po/ia.po b/po/ia.po
index 0e82dae5..5a93b4f9 100644
--- a/po/ia.po
+++ b/po/ia.po
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:21+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:17+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/id.po b/po/id.po
index 1f7d87d5..1df055fb 100644
--- a/po/id.po
+++ b/po/id.po
@@ -8,15 +8,15 @@ msgstr ""
"Project-Id-Version: midori\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-07-28 07:51+0000\n"
-"Last-Translator: Viko Adi Rahmawan <Unknown>\n"
+"PO-Revision-Date: 2013-11-12 09:34+0000\n"
+"Last-Translator: WebKit Team <Unknown>\n"
"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:22+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:17+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: id\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
@@ -530,6 +530,7 @@ msgstr ""
" Dani Pratomo https://launchpad.net/~daneepee\n"
" Reza Faiz A Rahman https://launchpad.net/~ylpmiskrad\n"
" Risman Rangga Pratama https://launchpad.net/~imanrp\n"
+" Rizal Muttaqin https://launchpad.net/~sundaralinux\n"
" Viko Adi Rahmawan https://launchpad.net/~vikoadi\n"
" WebKit Team https://launchpad.net/~webkit-team\n"
" padmawan https://launchpad.net/~andhika-padmawan"
diff --git a/po/it.po b/po/it.po
index a6cea22f..81d35ff0 100644
--- a/po/it.po
+++ b/po/it.po
@@ -10,15 +10,15 @@ msgstr ""
"Project-Id-Version: midori 0.1.7\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-08-16 08:16+0000\n"
+"PO-Revision-Date: 2013-12-11 12:34+0000\n"
"Last-Translator: WebKit Team <Unknown>\n"
"Language-Team: Italian <xfce-it-translators@googlegroups.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-08-17 04:35+0000\n"
-"X-Generator: Launchpad (build 16723)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:17+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: it\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
@@ -541,6 +541,7 @@ msgstr ""
" Cristian Marchi https://launchpad.net/~cri-penta\n"
" Cristian Marchi https://launchpad.net/~cri79\n"
" Fabio Gaudenzi https://launchpad.net/~bafio-fruges-c\n"
+" Filippo Vicentini https://launchpad.net/~filippovicentini\n"
" Lorenzo Bracci https://launchpad.net/~lore-bracci\n"
" Marchi Cristian https://launchpad.net/~cri-penta-8\n"
" Michael Moroni https://launchpad.net/~airon90\n"
diff --git a/po/ja.po b/po/ja.po
index e70d525c..2a6a73d1 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -8,15 +8,15 @@ msgstr ""
"Project-Id-Version: Midori 0.1.9\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-06-02 11:58+0000\n"
+"PO-Revision-Date: 2013-11-12 09:29+0000\n"
"Last-Translator: Masato HASHIMOTO <cabezon.hashimoto@gmail.com>\n"
"Language-Team: Japanese <xfce-users-jp@googlegroups.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:22+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:17+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: ja\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
@@ -300,27 +300,27 @@ msgstr "ブックマーク"
#: ../midori/midori-browser.c:949
msgid "New Folder"
-msgstr ""
+msgstr "新しいフォルダー"
#: ../midori/midori-browser.c:949
msgid "Edit Folder"
-msgstr ""
+msgstr "フォルダーの編集"
#: ../midori/midori-browser.c:951
msgid "New Bookmark"
-msgstr ""
+msgstr "新しいブックマーク"
#: ../midori/midori-browser.c:951
msgid "Edit Bookmark"
-msgstr ""
+msgstr "ブックマークの編集"
#: ../midori/midori-browser.c:973
msgid "Type a name for this bookmark, and choose where to keep it."
-msgstr ""
+msgstr "このブックマークの名前を入力し、追加先を選択してください。"
#: ../midori/midori-browser.c:975
msgid "Type a name for this folder, and choose where to keep it."
-msgstr ""
+msgstr "このフォルダーの名前を入力し、追加先を選択してください。"
#: ../midori/midori-browser.c:1030
msgid "Add to _Speed Dial"
@@ -328,7 +328,7 @@ msgstr "スピードダイアルに追加(_S)"
#: ../midori/midori-browser.c:1039
msgid "Show in Bookmarks _Bar"
-msgstr ""
+msgstr "ブックマークバーに表示する(_B)"
#: ../midori/midori-browser.c:1047
msgid "Run as _web application"
@@ -517,7 +517,7 @@ msgstr "軽快なウェブブラウザー"
#: ../midori/midori-browser.c:4753
msgid "See about:version for version info."
-msgstr "バージョン情報は about:version をご覧ください。"
+msgstr "詳しいバージョン情報は about:version をご覧ください。"
#: ../midori/midori-browser.c:4755
msgid ""
@@ -535,6 +535,7 @@ msgstr ""
"Masato Hashimoto <hashimo@xfce.org>\n"
"\n"
"Launchpad Contributions:\n"
+" Hiroshi Yamamoto https://launchpad.net/~higon\n"
" Joji Bronner https://launchpad.net/~jojiinchrist\n"
" Masato HASHIMOTO https://launchpad.net/~hashimo"
@@ -727,19 +728,19 @@ msgstr "新しいフォルダーの追加(_F)"
#: ../midori/midori-browser.c:5406
msgid "_Import bookmarks…"
-msgstr ""
+msgstr "ブックマークのインポート(_I)…"
#: ../midori/midori-browser.c:5409
msgid "_Export bookmarks…"
-msgstr ""
+msgstr "ブックマークのエクスポート(_E)…"
#: ../midori/midori-browser.c:5412
msgid "_Manage Search Engines…"
-msgstr ""
+msgstr "検索エンジンの管理(_M)…"
#: ../midori/midori-browser.c:5415
msgid "_Clear Private Data…"
-msgstr ""
+msgstr "プライベートデータのクリア(_C)…"
#: ../midori/midori-browser.c:5418
msgid "_Inspect Page"
@@ -1168,30 +1169,30 @@ msgstr "%s はあなたの場所を知ろうとしています。"
#: ../midori/midori-view.c:1250
#, c-format
msgid "'%s' can't be found"
-msgstr ""
+msgstr "'%s' が見つかりませんでした"
#: ../midori/midori-view.c:1251
#, c-format
msgid "The page '%s' couldn't be loaded:"
-msgstr ""
+msgstr "ページ '%s' を読み込めませんでした:"
#: ../midori/midori-view.c:1255
msgid "Check the address for typos"
-msgstr ""
+msgstr "アドレスに誤りがないか確認してください"
#: ../midori/midori-view.c:1256
msgid ""
"Make sure that an ethernet cable is plugged in or the wireless card is "
"activated"
-msgstr ""
+msgstr "LAN ケーブルが接続されているかどうか、または無線 LAN カードが有効になっているか確認してください"
#: ../midori/midori-view.c:1257
msgid "Verify that your network settings are correct"
-msgstr ""
+msgstr "ネットワークが正しく設定されているか確認してください"
#: ../midori/midori-view.c:1261
msgid "Try Again"
-msgstr ""
+msgstr "再試行"
#: ../midori/midori-view.c:1386
#, c-format
@@ -1222,7 +1223,7 @@ msgstr "要素の検証(_E)"
#: ../midori/midori-view.c:2472
msgid "Open _Link"
-msgstr ""
+msgstr "リンクを開く(_L)"
#: ../midori/midori-view.c:2478
msgid "Open Link in New _Tab"
@@ -1379,7 +1380,7 @@ msgstr "カッコ内のバージョン番号は実行中に使用されている
#: ../midori/midori-view.c:4208
msgid "Page loading delayed:"
-msgstr ""
+msgstr "ページ読み込み遅延:"
#: ../midori/midori-view.c:4209
msgid "Loading delayed either due to a recent crash or startup preferences."
@@ -1626,11 +1627,11 @@ msgstr "ポップアップウィンドウを自動的に開くスクリプトの
#: ../midori/midori-preferences.c:406
msgid "Default Zoom Level"
-msgstr ""
+msgstr "デフォルトズームレベル"
#: ../midori/midori-preferences.c:410
msgid "Initial factor to enlarge newly opened tabs by"
-msgstr ""
+msgstr "新しくタブを開いた時の拡大率です"
#: ../midori/midori-preferences.c:414
msgid "Preferred languages"
@@ -1841,7 +1842,7 @@ msgstr "検索エンジンを保存できませんでした。%s"
#: ../midori/midori-historycompletion.vala:17
msgid "Bookmarks and History"
-msgstr ""
+msgstr "ブックマークと履歴"
#: ../midori/midori-historycompletion.vala:54
#, c-format
@@ -1918,63 +1919,61 @@ msgstr "ブックマークアイテムの追加に失敗しました: %s\n"
#, c-format
msgid "%d bookmark"
msgid_plural "%d bookmarks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d 個のブックマーク"
#. i18n: [n] subfolder(s)
#: ../panels/midori-bookmarks.c:506
#, c-format
msgid "%d subfolder"
msgid_plural "%d subfolders"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d 個のサブフォルダー"
#. i18n: Empty folder
#: ../panels/midori-bookmarks.c:534
#, c-format
msgid "Empty folder"
-msgstr ""
+msgstr "空のフォルダー"
#. i18n: Folder containing [[n] folder(s)] and no bookmark
#: ../panels/midori-bookmarks.c:537
#, c-format
msgid "Folder containing %s and no bookmark"
-msgstr ""
+msgstr "フォルダーには %s が含まれており、ブックマークはありません"
#. i18n: Folder containing [[n] bookmark(s)]
#: ../panels/midori-bookmarks.c:541
#, c-format
msgid "Folder containing %s"
-msgstr ""
+msgstr "フォルダーには %s が含まれています"
#. i18n: Folder containing [[n] bookmark(s)] and [[n] folder(s)]
#: ../panels/midori-bookmarks.c:544
#, c-format
msgid "Folder containing %s and %s"
-msgstr ""
+msgstr "フォルダーには %s と %s が含まれています"
#. i18n: Bookmark leading to: [bookmark uri]
#: ../panels/midori-bookmarks.c:555
#, c-format
msgid "Bookmark leading to: %s"
-msgstr ""
+msgstr "リンク先: %s"
#. i18n: [[n] folder(s)] and no bookmark
#: ../panels/midori-bookmarks.c:569
#, c-format
msgid "%s and no bookmark"
-msgstr ""
+msgstr "%s と 0 個のブックマーク"
#. i18n: [[n] bookmark(s)] and [[n] folder(s)]
#: ../panels/midori-bookmarks.c:575
#, c-format
msgid "%s and %s"
-msgstr ""
+msgstr "%s と %s"
#: ../panels/midori-bookmarks.c:627
#, c-format
msgid "Failed to update bookmark: %s\n"
-msgstr ""
+msgstr "ブックマークの更新に失敗しました: %s\n"
# tooltip
#: ../panels/midori-bookmarks.c:686
@@ -2826,7 +2825,7 @@ msgstr "古い履歴アイテムの削除に失敗しました: %s\n"
#: ../midori/midori-bookmarks.c:60
#, c-format
msgid "Failed to remove bookmark item: %s\n"
-msgstr ""
+msgstr "ブックマークアイテムの削除に失敗しました: %s\n"
#: ../midori/midori-bookmarks.c:106
msgid "failed to ATTACH old db"
@@ -3188,16 +3187,16 @@ msgstr "サイトごとに Cookie のパーミッションを管理します"
#: ../extensions/apps.vala:58
#, c-format
msgid "Failed to fetch application icon in %s: %s"
-msgstr ""
+msgstr "%s のアプリケーションアイコンの取得に失敗しました: %s"
#: ../extensions/apps.vala:84
msgid "Launcher created"
-msgstr ""
+msgstr "ランチャーを作成しました"
#: ../extensions/apps.vala:85
#, c-format
msgid "You can now run <b>%s</b> from your launcher or menu"
-msgstr ""
+msgstr "ランチャーメニューから <b>%s</b> を実行できます"
#: ../extensions/apps.vala:88 ../extensions/apps.vala:90
#, c-format
@@ -3206,7 +3205,7 @@ msgstr ""
#: ../extensions/apps.vala:89
msgid "Error creating launcher"
-msgstr ""
+msgstr "ランチャーの作成でエラー"
#: ../extensions/apps.vala:126
msgid "Applications"
@@ -3214,28 +3213,28 @@ msgstr "アプリケーション"
#: ../extensions/apps.vala:134
msgid "New _Profile"
-msgstr ""
+msgstr "新しいプロファイル(_P)"
#: ../extensions/apps.vala:135
msgid "Creates a new, independant profile and a launcher"
-msgstr ""
+msgstr "新しく独立したプロファイルとランチャーを作成します"
#: ../extensions/apps.vala:144
#, c-format
msgid "Midori (%s)"
-msgstr ""
+msgstr "Midori (%s)"
#: ../extensions/apps.vala:149
msgid "New _App"
-msgstr ""
+msgstr "新しいアプリ(_A)"
#: ../extensions/apps.vala:150
msgid "Creates a new app for a specific site"
-msgstr ""
+msgstr "指定したサイト用に新しいアプリを作成します"
#: ../extensions/apps.vala:175
msgid "Error launching"
-msgstr ""
+msgstr "起動時にエラー"
#: ../extensions/apps.vala:384
msgid "Create _Launcher"
@@ -3273,7 +3272,7 @@ msgstr "ファイル '<b>%s</b>' をダウンロードしました。"
#: ../extensions/transfers.vala:433
#, c-format
msgid "'<b>%s</b>' and %d other files have been downloaded."
-msgstr ""
+msgstr "'<b>%s</b>' とその他 %d 個のファイルをダウンロードしました。"
#: ../extensions/transfers.vala:434
msgid "Transfer completed"
diff --git a/po/kk.po b/po/kk.po
index a5ba7afc..b2d59291 100644
--- a/po/kk.po
+++ b/po/kk.po
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2013-09-03 04:43+0000\n"
-"X-Generator: Launchpad (build 16753)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:17+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: kk\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
diff --git a/po/ko.po b/po/ko.po
index 0c6bd470..f477d272 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -26,8 +26,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2013-08-01 05:20+0000\n"
-"X-Generator: Launchpad (build 16718)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:17+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: ko\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
diff --git a/po/ky.po b/po/ky.po
index 7c237bf3..0be95e75 100644
--- a/po/ky.po
+++ b/po/ky.po
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:22+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:17+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/lt.po b/po/lt.po
index 25172f16..b4a6f5e7 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -17,8 +17,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"(n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2013-07-30 04:38+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:17+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: \n"
"X-Poedit-Language: Lithuanian\n"
"X-Poedit-SourceCharset: utf-8\n"
diff --git a/po/lv.po b/po/lv.po
index 58b56d36..85fb2d5e 100644
--- a/po/lv.po
+++ b/po/lv.po
@@ -8,15 +8,15 @@ msgstr ""
"Project-Id-Version: midori\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-06-03 11:38+0000\n"
-"Last-Translator: WebKit Team <Unknown>\n"
+"PO-Revision-Date: 2013-10-24 08:39+0000\n"
+"Last-Translator: Jānis-Marks Gailis <jeanmarc.gailis@gmail.com>\n"
"Language-Team: Latvian <lv@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:22+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:17+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
@@ -53,15 +53,15 @@ msgstr ""
#: ../data/midori-private.desktop.in.h:1
msgid "Midori Private Browsing"
-msgstr ""
+msgstr "Midori Privātā pārlūkošana"
#: ../data/midori-private.desktop.in.h:2 ../midori/midori-view.c:4106
msgid "Private Browsing"
-msgstr ""
+msgstr "Privātā pārlūkošana"
#: ../data/midori-private.desktop.in.h:3
msgid "Open a new private browsing window"
-msgstr ""
+msgstr "Atvērt jaunu Privātā pārlūkošana logu"
#: ../midori/main.c:52
#, c-format
@@ -513,6 +513,7 @@ msgid "translator-credits"
msgstr ""
"Launchpad Contributions:\n"
" Arvis Lācis https://launchpad.net/~arvis-lacis\n"
+" Jānis-Marks Gailis https://launchpad.net/~jeanmarc-gailis\n"
" WebKit Team https://launchpad.net/~webkit-team"
#: ../midori/midori-browser.c:5243
diff --git a/po/ml.po b/po/ml.po
index 6b9ee6fe..304a98d3 100644
--- a/po/ml.po
+++ b/po/ml.po
@@ -8,32 +8,32 @@ msgstr ""
"Project-Id-Version: midori\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-08-24 07:13+0000\n"
-"Last-Translator: WebKit Team <Unknown>\n"
+"PO-Revision-Date: 2013-11-23 07:46+0000\n"
+"Last-Translator: STyM Alfazz <Unknown>\n"
"Language-Team: Malayalam <ml@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-08-25 04:36+0000\n"
-"X-Generator: Launchpad (build 16738)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:17+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
msgid "Midori"
-msgstr ""
+msgstr "മിഡോരി"
#: ../data/midori.desktop.in.h:2
msgid "Web Browser"
-msgstr ""
+msgstr "വെബ് ബ്രൗസര്‍"
#: ../data/midori.desktop.in.h:3
msgid "Midori Web Browser"
-msgstr ""
+msgstr "മിഡോരി വെബ് ബ്രൗസര്‍"
#: ../data/midori.desktop.in.h:4
msgid "Browse the Web"
-msgstr ""
+msgstr "വെബില്‍ തിരയുക"
#: ../data/midori.desktop.in.h:5
msgid "Internet;WWW;Explorer"
@@ -41,11 +41,11 @@ msgstr ""
#: ../data/midori.desktop.in.h:6 ../midori/midori-browser.c:1425
msgid "New Tab"
-msgstr ""
+msgstr "പുതിയ ടാബ്"
#: ../data/midori.desktop.in.h:7 ../midori/midori-browser.c:1422
msgid "New Window"
-msgstr ""
+msgstr "പുതിയ ജാലകം"
#: ../data/midori.desktop.in.h:8
msgid "New Private Browsing Window"
@@ -74,7 +74,7 @@ msgstr ""
#: ../midori/main.c:79
msgid "ADDRESS"
-msgstr ""
+msgstr "വിലാസം"
#: ../midori/main.c:81
msgid "Use FOLDER as configuration folder"
@@ -122,11 +122,11 @@ msgstr ""
#: ../midori/main.c:103
msgid "Display program version"
-msgstr ""
+msgstr "പ്രോഗ്രാം പതിപ്പ് കാണിക്കുക"
#: ../midori/main.c:105
msgid "Addresses"
-msgstr ""
+msgstr "വിലാസങ്ങള്‍"
#: ../midori/main.c:107
msgid "Block URIs according to regular expression PATTERN"
@@ -134,7 +134,7 @@ msgstr ""
#: ../midori/main.c:107
msgid "PATTERN"
-msgstr ""
+msgstr "രീതി"
#. i18n: CLI: Close tabs, clear private data, open starting page
#: ../midori/main.c:111
@@ -159,11 +159,11 @@ msgstr ""
#: ../midori/main.c:358
msgid "An unknown error occured"
-msgstr ""
+msgstr "അപരിചിതമായ ഒരു പിശക് ഉണ്ടായിരിക്കുന്നു"
#: ../midori/midori-app.c:1340 ../midori/midori-browser.c:6102
msgid "_Bookmarks"
-msgstr ""
+msgstr "_സൂചിതസ്ഥാനങ്ങള്‍"
#: ../midori/midori-app.c:1341
msgid "Add Boo_kmark"
@@ -171,12 +171,12 @@ msgstr ""
#: ../midori/midori-app.c:1342
msgid "_Extensions"
-msgstr ""
+msgstr "_ചേര്‍പ്പുകള്‍"
#. i18n: Browsing history, visited web pages, closed tabs
#: ../midori/midori-app.c:1343 ../midori/midori-privatedata.c:175
msgid "_History"
-msgstr ""
+msgstr "_ചരിത്രം"
#: ../midori/midori-app.c:1344
msgid "_Userscripts"
@@ -188,7 +188,7 @@ msgstr ""
#: ../midori/midori-app.c:1346
msgid "New _Tab"
-msgstr ""
+msgstr "പുതിയ _ടാബ്"
#: ../midori/midori-app.c:1347
msgid "_Transfers"
@@ -204,11 +204,11 @@ msgstr ""
#: ../midori/midori-app.c:1350 ../midori/midori-browser.c:5245
msgid "New _Window"
-msgstr ""
+msgstr "പുതിയ _ജാലകം"
#: ../midori/midori-app.c:1351
msgid "New _Folder"
-msgstr ""
+msgstr "പുതിയ _അറ"
#: ../midori/midori-app.c:1400 ../midori/midori-app.c:1403
#: ../midori/midori-app.c:1406
@@ -512,7 +512,7 @@ msgstr ""
msgid "translator-credits"
msgstr ""
"Launchpad Contributions:\n"
-" STyM Alfaz https://launchpad.net/~alfasst\n"
+" STyM Alfazz https://launchpad.net/~alfasst\n"
" WebKit Team https://launchpad.net/~webkit-team"
#: ../midori/midori-browser.c:5243
diff --git a/po/ms.po b/po/ms.po
index 753d4d7d..811a38f3 100644
--- a/po/ms.po
+++ b/po/ms.po
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-08-09 04:41+0000\n"
-"X-Generator: Launchpad (build 16723)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:17+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/nb.po b/po/nb.po
index 77bd0fe7..4102ea16 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -8,15 +8,15 @@ msgstr ""
"Project-Id-Version: midori\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-08-29 08:02+0000\n"
-"Last-Translator: Magnus Meyer Hustveit <dizzi90@gmail.com>\n"
+"PO-Revision-Date: 2013-12-30 13:26+0000\n"
+"Last-Translator: kingu <comradekingu@gmail.com>\n"
"Language-Team: Norwegian Bokmal <nb@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-08-30 04:41+0000\n"
-"X-Generator: Launchpad (build 16750)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:17+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
@@ -226,11 +226,11 @@ msgstr "Misformet dokument."
#: ../midori/midori-array.c:656
msgid "Unrecognized bookmark format."
-msgstr ""
+msgstr "Ukjent bokmerke-format"
#: ../midori/midori-browser.c:328 ../midori/midori-browser.c:5377
msgid "Go forward to the next page"
-msgstr ""
+msgstr "Gå videre til neste side"
#. i18n: Visit the following logical page, ie. in a forum or blog
#: ../midori/midori-browser.c:335 ../midori/midori-browser.c:5385
@@ -240,16 +240,16 @@ msgstr ""
#: ../midori/midori-browser.c:345
msgid "Web Search…"
-msgstr ""
+msgstr "Nettsøk..."
#: ../midori/midori-browser.c:449 ../midori/midori-browser.c:5326
#: ../midori/midori-browser.c:5335
msgid "Reload the current page"
-msgstr ""
+msgstr "Last inn gjeldende side på nytt"
#: ../midori/midori-browser.c:457 ../midori/midori-browser.c:5332
msgid "Stop loading the current page"
-msgstr ""
+msgstr "Stopp innlasting av gjeldende side"
#: ../midori/midori-browser.c:534
#, c-format
@@ -266,7 +266,7 @@ msgstr "Verdien '%s' er ikke gyldig for %s"
#: ../midori/midori-browser.c:6890
#, c-format
msgid "Unexpected setting '%s'"
-msgstr ""
+msgstr "Uventet innstilling '%s'"
#: ../midori/midori-browser.c:589 ../midori/midori-browser.c:662
#, c-format
@@ -281,19 +281,19 @@ msgstr ""
#: ../midori/midori-browser.c:852 ../midori/midori-browser.c:894
#: ../panels/midori-bookmarks.c:118
msgid "Bookmarks"
-msgstr ""
+msgstr "Bokmerker"
#: ../midori/midori-browser.c:949
msgid "New Folder"
-msgstr ""
+msgstr "Ny mappe"
#: ../midori/midori-browser.c:949
msgid "Edit Folder"
-msgstr ""
+msgstr "Rediger mappe"
#: ../midori/midori-browser.c:951
msgid "New Bookmark"
-msgstr ""
+msgstr "Nytt bokmerke"
#: ../midori/midori-browser.c:951
msgid "Edit Bookmark"
@@ -321,7 +321,7 @@ msgstr ""
#: ../midori/midori-browser.c:1160 ../midori/midori-browser.c:4523
msgid "Save file as"
-msgstr ""
+msgstr "Lagre fil som"
#: ../midori/midori-browser.c:1170
msgid "Save associated _resources"
@@ -329,11 +329,11 @@ msgstr ""
#: ../midori/midori-browser.c:1422
msgid "A new window has been opened"
-msgstr ""
+msgstr "Nytt vindu åpnet"
#: ../midori/midori-browser.c:1425
msgid "A new tab has been opened"
-msgstr ""
+msgstr "Ny fane åpnet"
#: ../midori/midori-browser.c:1443
msgid "Error opening the image!"
@@ -514,6 +514,7 @@ msgstr ""
"Launchpad Contributions:\n"
" Magnus Meyer Hustveit https://launchpad.net/~dizzi90\n"
" Neethan Puvanendran https://launchpad.net/~neethan98\n"
+" kingu https://launchpad.net/~comradekingu\n"
" messo https://launchpad.net/~rsolvang"
#: ../midori/midori-browser.c:5243
diff --git a/po/nl.po b/po/nl.po
index 00d57b5a..b59660ce 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -16,8 +16,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-08-09 04:41+0000\n"
-"X-Generator: Launchpad (build 16723)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:16+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: nl (Dutch)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
diff --git a/po/nn.po b/po/nn.po
index 499e38d1..8923cf8b 100644
--- a/po/nn.po
+++ b/po/nn.po
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:22+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:17+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/no.po b/po/no.po
index 983c969e..a2476f2e 100644
--- a/po/no.po
+++ b/po/no.po
@@ -16,8 +16,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:22+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:18+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/pa.po b/po/pa.po
index 4820c31c..f19d0ec3 100644
--- a/po/pa.po
+++ b/po/pa.po
@@ -14,8 +14,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:22+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:18+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/pl.po b/po/pl.po
index 0786ee49..7f8089cc 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -18,8 +18,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2013-08-04 05:16+0000\n"
-"X-Generator: Launchpad (build 16718)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:18+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: pl\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
diff --git a/po/pt.po b/po/pt.po
index 64c0ba84..33be2c5d 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-09-15 05:05+0000\n"
-"X-Generator: Launchpad (build 16761)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:18+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: pt_PT\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 234d2eaf..61492f49 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -10,15 +10,15 @@ msgstr ""
"Project-Id-Version: Midori\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-07-31 08:09+0000\n"
-"Last-Translator: Paulo Galardi <paulogalardi1@gmail.com>\n"
+"PO-Revision-Date: 2013-10-01 08:07+0000\n"
+"Last-Translator: WebKit Team <Unknown>\n"
"Language-Team: Brazilian Portuguese <xfce-i18n-br@xfce.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2013-08-01 05:20+0000\n"
-"X-Generator: Launchpad (build 16718)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:19+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: pt_BR\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
@@ -537,9 +537,10 @@ msgstr ""
" Iuri L. Machado https://launchpad.net/~imetallica\n"
" Leonardo Lemos https://launchpad.net/~leonardolemos\n"
" Neliton Pereira Jr. https://launchpad.net/~nelitonpjr\n"
-" Paulo Galardi https://launchpad.net/~paulogalardi1\n"
+" Paulo Galardi https://launchpad.net/~paulogalardi1-deactivatedaccount\n"
" Rafael Ferreira https://launchpad.net/~rafael-f-f1\n"
-" Sergio https://launchpad.net/~ikisham"
+" Sergio https://launchpad.net/~ikisham\n"
+" WebKit Team https://launchpad.net/~webkit-team"
#: ../midori/midori-browser.c:5243
msgid "_File"
diff --git a/po/ro.po b/po/ro.po
index 2b6ad3e7..6914d91f 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -19,8 +19,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
"== 0) && (n != 0))) ? 2: 1));\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:22+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:18+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: ro\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
diff --git a/po/ru.po b/po/ru.po
index 8d7c8e1e..f0790b35 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: midori 0.2.8\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-08-26 06:46+0000\n"
+"PO-Revision-Date: 2014-01-22 10:23+0000\n"
"Last-Translator: Sergey \"Shnatsel\" Davidoff <Shnatsel@gmail.com>\n"
"Language-Team: Russian <ru@li.org>\n"
"MIME-Version: 1.0\n"
@@ -17,8 +17,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2013-08-27 04:36+0000\n"
-"X-Generator: Launchpad (build 16738)\n"
+"X-Launchpad-Export-Date: 2014-01-23 05:16+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: ru\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
@@ -548,10 +548,21 @@ msgstr ""
" Igor Mamzov https://launchpad.net/~igor-mamzov\n"
" Kirill Ivaha https://launchpad.net/~kirill-ivaha\n"
" Ksenia Dylova https://launchpad.net/~ksjenka\n"
+" KursoRUS https://launchpad.net/~kursornn\n"
+" Kyrill Detinov https://launchpad.net/~lazy-kent\n"
" Lexapi https://launchpad.net/~lexapi\n"
+" Max Jekov https://launchpad.net/~maks70\n"
" Oleg https://launchpad.net/~oopseekoleg\n"
+" Pargev https://launchpad.net/~pargev1993\n"
+" Pasha. P. Komar https://launchpad.net/~discipulus\n"
+" Pustovalov Maxim https://launchpad.net/~skrill-dmc\n"
" Sergey \"Shnatsel\" Davidoff https://launchpad.net/~shnatsel\n"
-" Глория Хрусталёва https://launchpad.net/~gloriya"
+" Yanbaeva https://launchpad.net/~yanbaevas\n"
+" daggert https://launchpad.net/~daggert\n"
+" moonk https://launchpad.net/~wrex-tp\n"
+" zepect https://launchpad.net/~zepect\n"
+" Глория Хрусталёва https://launchpad.net/~gloriya\n"
+" Дмитрий https://launchpad.net/~myprodreams"
#: ../midori/midori-browser.c:5243
msgid "_File"
diff --git a/po/sk.po b/po/sk.po
index b4bf1c94..eb3b5879 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -9,15 +9,15 @@ msgstr ""
"Project-Id-Version: Midori 0.3.6-1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-06-02 11:58+0000\n"
+"PO-Revision-Date: 2013-10-27 08:01+0000\n"
"Last-Translator: WebKit Team <Unknown>\n"
"Language-Team: slovenčina <slovenska-lokalizacia-xfce@googlegroups.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:23+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:18+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"X-Poedit-Country: SLOVAKIA\n"
"Language: sk\n"
"X-Poedit-Language: Slovak\n"
@@ -244,7 +244,7 @@ msgstr "Prejsť na nasledujúcu podstránku"
#: ../midori/midori-browser.c:345
msgid "Web Search…"
-msgstr ""
+msgstr "Vyhľadávanie na webe..."
#: ../midori/midori-browser.c:449 ../midori/midori-browser.c:5326
#: ../midori/midori-browser.c:5335
@@ -289,27 +289,27 @@ msgstr "Záložky"
#: ../midori/midori-browser.c:949
msgid "New Folder"
-msgstr ""
+msgstr "Nový priečinok"
#: ../midori/midori-browser.c:949
msgid "Edit Folder"
-msgstr ""
+msgstr "Upraviť priečinok"
#: ../midori/midori-browser.c:951
msgid "New Bookmark"
-msgstr ""
+msgstr "Nová záložka"
#: ../midori/midori-browser.c:951
msgid "Edit Bookmark"
-msgstr ""
+msgstr "Upraviť záložku"
#: ../midori/midori-browser.c:973
msgid "Type a name for this bookmark, and choose where to keep it."
-msgstr ""
+msgstr "Zadajte názov pre túto záložku a zvoľte miesto, kde bude ponechaná."
#: ../midori/midori-browser.c:975
msgid "Type a name for this folder, and choose where to keep it."
-msgstr ""
+msgstr "Zadajte názov pre tento priečinok a zvoľte miesto, kde bude uložený."
#: ../midori/midori-browser.c:1030
msgid "Add to _Speed Dial"
@@ -393,7 +393,7 @@ msgstr "Pridať novú záložku"
#. FIXME: granite: should return GtkWidget* like GTK+
#: ../midori/midori-browser.c:2669 ../midori/midori-browser.c:5277
msgid "Share this page"
-msgstr ""
+msgstr "Zdieľať túto stránku"
#: ../midori/midori-browser.c:3149 ../midori/midori-searchaction.c:450
msgid "Empty"
@@ -535,6 +535,7 @@ msgstr ""
"\n"
"Launchpad Contributions:\n"
" DAG Software https://launchpad.net/~dagsoftware\n"
+" Milan Slovák https://launchpad.net/~milboys\n"
" Tomáš Vadina https://launchpad.net/~kyberdev\n"
" WebKit Team https://launchpad.net/~webkit-team"
@@ -713,19 +714,19 @@ msgstr "Pridať nový priečinok"
#: ../midori/midori-browser.c:5406
msgid "_Import bookmarks…"
-msgstr ""
+msgstr "_Importovať záložky..."
#: ../midori/midori-browser.c:5409
msgid "_Export bookmarks…"
-msgstr ""
+msgstr "Exportovať záložky..."
#: ../midori/midori-browser.c:5412
msgid "_Manage Search Engines…"
-msgstr ""
+msgstr "_Správa vyhľadávania..."
#: ../midori/midori-browser.c:5415
msgid "_Clear Private Data…"
-msgstr ""
+msgstr "_Odstrániť súkromné údaje..."
#: ../midori/midori-browser.c:5418
msgid "_Inspect Page"
@@ -741,7 +742,7 @@ msgstr "_Ďalšia karta"
#: ../midori/midori-browser.c:5427
msgid "Move Tab to _first position"
-msgstr ""
+msgstr "Presunúť záložku na _prvú pozíciu"
#: ../midori/midori-browser.c:5429
msgid "Move Tab _Backward"
@@ -753,7 +754,7 @@ msgstr "Presunúť kartu do_predu"
#: ../midori/midori-browser.c:5433
msgid "Move Tab to _last position"
-msgstr ""
+msgstr "Presunúť záložku na _poslednú pozíciu"
#: ../midori/midori-browser.c:5436
msgid "Focus _Current Tab"
@@ -887,7 +888,7 @@ msgstr "Zobrazí uložené záložky"
#: ../midori/midori-browser.c:6137
msgid "_Tabs"
-msgstr ""
+msgstr "_Záložky"
#: ../midori/midori-browser.c:6139
msgid "Show a list of all open tabs"
@@ -1010,15 +1011,15 @@ msgstr "Zobraziť naposledy otvorené karty bez načítania"
#: ../midori/midori-websettings.c:129
msgid "Show Blank Page"
-msgstr ""
+msgstr "Zobraziť prázdnu stránku"
#: ../midori/midori-websettings.c:131
msgid "Show default Search Engine"
-msgstr ""
+msgstr "Zobraziť predvolené vyhľadávanie"
#: ../midori/midori-websettings.c:133
msgid "Show custom page"
-msgstr ""
+msgstr "Zobraziť vlastnú stránku"
#: ../midori/midori-websettings.c:150
msgid "Japanese (SHIFT_JIS)"
@@ -1149,12 +1150,12 @@ msgstr "%s požaduje zistenie Vašej polohy."
#: ../midori/midori-view.c:1250
#, c-format
msgid "'%s' can't be found"
-msgstr ""
+msgstr "'%s' nebol nájdený"
#: ../midori/midori-view.c:1251
#, c-format
msgid "The page '%s' couldn't be loaded:"
-msgstr ""
+msgstr "Stránku '%s' sa nepodarilo načítať:"
#: ../midori/midori-view.c:1255
msgid "Check the address for typos"
@@ -1168,11 +1169,11 @@ msgstr ""
#: ../midori/midori-view.c:1257
msgid "Verify that your network settings are correct"
-msgstr ""
+msgstr "Overte či máte správne nastavenú sieť"
#: ../midori/midori-view.c:1261
msgid "Try Again"
-msgstr ""
+msgstr "Skúsiť znova"
#: ../midori/midori-view.c:1386
#, c-format
@@ -1203,7 +1204,7 @@ msgstr "Preskúmať _prvok"
#: ../midori/midori-view.c:2472
msgid "Open _Link"
-msgstr ""
+msgstr "Otvoriť _odkaz"
#: ../midori/midori-view.c:2478
msgid "Open Link in New _Tab"
@@ -1227,11 +1228,11 @@ msgstr "Kopírovať _cieľ odkazu"
#: ../midori/midori-view.c:2497
msgid "Save _As…"
-msgstr ""
+msgstr "Uložiť _ako…"
#: ../midori/midori-view.c:2507
msgid "Open _Image in New Window"
-msgstr ""
+msgstr "Otvoriť _obrázok v novom okne"
#: ../midori/midori-view.c:2508
msgid "Open _Image in New Tab"
@@ -1239,7 +1240,7 @@ msgstr "Otvoriť _obrázok na novej karte"
#: ../midori/midori-view.c:2512
msgid "Copy Im_age"
-msgstr ""
+msgstr "Kopírovať _obrázok"
#: ../midori/midori-view.c:2515
msgid "Save I_mage"
@@ -1614,7 +1615,7 @@ msgstr "Či skripty môžu otvárať vyskakovacie okná automaticky"
#: ../midori/midori-preferences.c:406
msgid "Default Zoom Level"
-msgstr ""
+msgstr "Predvolená úroveň priblíženia"
#: ../midori/midori-preferences.c:410
msgid "Initial factor to enlarge newly opened tabs by"
@@ -1651,7 +1652,7 @@ msgstr "Otvárať nové stránky v:"
#: ../midori/midori-preferences.c:437
msgid "New tab behavior:"
-msgstr ""
+msgstr "Správanie novej karty:"
#: ../midori/midori-preferences.c:442
msgid "Close Buttons on Tabs"
@@ -1701,7 +1702,7 @@ msgstr "Port"
#: ../midori/midori-preferences.c:497
msgid "Supported proxy types:"
-msgstr ""
+msgstr "Podporované typy proxy:"
#. TODO: Preserve page icons of search engines and merge privacy items
#: ../midori/midori-preferences.c:515 ../midori/midori-privatedata.c:323
@@ -1827,7 +1828,7 @@ msgstr "Vyhľadávače sa nepodarilo uložiť. %s"
#: ../midori/midori-historycompletion.vala:17
msgid "Bookmarks and History"
-msgstr ""
+msgstr "Záložky a história"
#: ../midori/midori-historycompletion.vala:54
#, c-format
@@ -1871,7 +1872,7 @@ msgstr "Nie je možné spustiť externý program"
#: ../midori/sokoke.c:552
msgid "Invalid URI"
-msgstr ""
+msgstr "Neplatná URI"
#. i18n: A panel at the bottom, to search text in pages
#: ../toolbars/midori-findbar.c:233
@@ -1919,19 +1920,19 @@ msgstr[1] ""
#: ../panels/midori-bookmarks.c:534
#, c-format
msgid "Empty folder"
-msgstr ""
+msgstr "Prázdny priečinok"
#. i18n: Folder containing [[n] folder(s)] and no bookmark
#: ../panels/midori-bookmarks.c:537
#, c-format
msgid "Folder containing %s and no bookmark"
-msgstr ""
+msgstr "Priečinok obsahuje %s a žiadne záložky"
#. i18n: Folder containing [[n] bookmark(s)]
#: ../panels/midori-bookmarks.c:541
#, c-format
msgid "Folder containing %s"
-msgstr ""
+msgstr "Priečinok obsahuje %s"
#. i18n: Folder containing [[n] bookmark(s)] and [[n] folder(s)]
#: ../panels/midori-bookmarks.c:544
diff --git a/po/sl.po b/po/sl.po
index b588de86..63af7973 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -16,8 +16,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
"n%100==4 ? 3 : 0);\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:23+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:18+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/sr.po b/po/sr.po
index 5f0d70f0..86c1e3b9 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -18,8 +18,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2013-08-13 04:45+0000\n"
-"X-Generator: Launchpad (build 16723)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:18+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: sr\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
diff --git a/po/sr@latin.po b/po/sr@latin.po
index 94bf110a..2070f52f 100644
--- a/po/sr@latin.po
+++ b/po/sr@latin.po
@@ -16,8 +16,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:23+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:19+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/sv.po b/po/sv.po
index 76b00a8c..92ebb41e 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -10,15 +10,15 @@ msgstr ""
"Project-Id-Version: midori\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-09-19 09:37+0000\n"
+"PO-Revision-Date: 2014-01-13 23:10+0000\n"
"Last-Translator: Joachim Johansson <Unknown>\n"
"Language-Team: Swedish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-09-20 05:13+0000\n"
-"X-Generator: Launchpad (build 16765)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:18+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: \n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
@@ -328,7 +328,7 @@ msgstr "Spara fil som"
#: ../midori/midori-browser.c:1170
msgid "Save associated _resources"
-msgstr "Spara associerade _resurser"
+msgstr "Spara tillhörande _resurser"
#: ../midori/midori-browser.c:1422
msgid "A new window has been opened"
@@ -619,7 +619,7 @@ msgstr "Sök efter ett ord eller ett uttryck på sidan"
#: ../midori/midori-browser.c:5313
msgid "Find _Next"
-msgstr "Hitta _nästa"
+msgstr "Sök _nästa"
#: ../midori/midori-browser.c:5316
msgid "Find _Previous"
@@ -894,7 +894,7 @@ msgstr "Visa sparade bokmärken"
#: ../midori/midori-browser.c:6137
msgid "_Tabs"
-msgstr "Flikar"
+msgstr "_Flikar"
#: ../midori/midori-browser.c:6139
msgid "Show a list of all open tabs"
@@ -1045,7 +1045,7 @@ msgstr "Aktuell flik"
#: ../midori/midori-websettings.c:187
msgid "Default"
-msgstr "Standard"
+msgstr "Förval"
#: ../midori/midori-websettings.c:188
msgid "Icons"
@@ -1325,7 +1325,7 @@ msgstr "Inspektera sida - %s"
#: ../midori/midori-view.c:4030
#, c-format
msgid "No documentation installed"
-msgstr "Ingen dokumentation installerad"
+msgstr "Dokumentationen är inte installerad"
#: ../midori/midori-view.c:4107
msgid "Midori doesn't store any personal data:"
@@ -1524,7 +1524,7 @@ msgstr "Är du säker på att du vill ta bort den här genvägen?"
#: ../midori/midori-preferences.c:297
msgid "Startup"
-msgstr "Uppstart"
+msgstr "Programstart"
#: ../midori/midori-preferences.c:299
msgid "When Midori starts:"
@@ -1569,7 +1569,7 @@ msgstr "Teckensnitt som används för att visa text med fast bredd"
#: ../midori/midori-preferences.c:343
msgid "The font size used to display fixed-width text"
-msgstr "Typsnittsstorlek som används för att visa text med fast bredd"
+msgstr "Storlek som används för att visa text med fast bredd"
#: ../midori/midori-preferences.c:345
msgid "Minimum Font Size"
@@ -1655,7 +1655,7 @@ msgstr "Öppna nya sidor i:"
#: ../midori/midori-preferences.c:437
msgid "New tab behavior:"
-msgstr "Inställning för nya flikar"
+msgstr "Beteende för nya flikar:"
#: ../midori/midori-preferences.c:442
msgid "Close Buttons on Tabs"
@@ -1684,7 +1684,7 @@ msgstr "Textredigerare"
#: ../midori/midori-preferences.c:463
msgid "News Aggregator"
-msgstr "RSS-läsare"
+msgstr "Nyhetsflödesläsare"
#. Page "Network"
#: ../midori/midori-preferences.c:470
@@ -1735,7 +1735,7 @@ msgstr "Ta bort gamla kakor efter:"
#: ../midori/midori-preferences.c:546 ../midori/midori-preferences.c:549
msgid "The maximum number of days to save cookies for"
-msgstr "Maximalt antal dagar kakor sparas"
+msgstr "Maximalt antal dagar som cookies sparas"
#: ../midori/midori-preferences.c:553
msgid "Only accept Cookies from sites you visit"
@@ -1876,7 +1876,7 @@ msgstr "Kunde inte köra externt program."
#: ../midori/sokoke.c:552
msgid "Invalid URI"
-msgstr "Ogilltigt URI"
+msgstr "Ogiltig länk"
#. i18n: A panel at the bottom, to search text in pages
#: ../toolbars/midori-findbar.c:233
@@ -2451,7 +2451,7 @@ msgstr "Kunde inte hitta root-delen i nyhetsflödets XML-data."
#: ../extensions/feed-panel/feed-parse.c:237
#, c-format
msgid "Unsupported feed format."
-msgstr "Formatet för flödet stöds inte."
+msgstr "Formatet för nyhetsflöde stöds inte."
#: ../extensions/feed-panel/feed-parse.c:267
#, c-format
@@ -2477,7 +2477,7 @@ msgstr "Kunde inte hitta \"channel\"-delen i RSS XML-data."
#: ../extensions/feed-panel/main.c:116
#, c-format
msgid "Feed '%s' already exists"
-msgstr "Flödet '%s' finns redan"
+msgstr "Nyhetsflödet '%s' finns redan"
#: ../extensions/feed-panel/main.c:192
#, c-format
@@ -2647,7 +2647,7 @@ msgstr "Anpassa snabbkommandon..."
#: ../extensions/shortcuts.c:312
msgid "Shortcuts"
-msgstr "Genvägar"
+msgstr "Snabbkommandon"
#: ../extensions/shortcuts.c:313
msgid "View and edit keyboard shortcuts"
@@ -3171,7 +3171,7 @@ msgstr "Hantera rättigheter för kakorna per webbplats"
#: ../extensions/apps.vala:58
#, c-format
msgid "Failed to fetch application icon in %s: %s"
-msgstr ""
+msgstr "Misslyckades med att hämta programikonen för %s: %s"
#: ../extensions/apps.vala:84
msgid "Launcher created"
diff --git a/po/th.po b/po/th.po
index fa29f945..7439932b 100644
--- a/po/th.po
+++ b/po/th.po
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:23+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:18+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/tr.po b/po/tr.po
index 2c1711de..4a7682cc 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -8,15 +8,15 @@ msgstr ""
"Project-Id-Version: midori\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-07-13 09:28+0000\n"
+"PO-Revision-Date: 2014-01-22 10:23+0000\n"
"Last-Translator: WebKit Team <Unknown>\n"
"Language-Team: Turkish <tr@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:23+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-23 05:16+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
@@ -531,15 +531,19 @@ msgstr ""
"\n"
"Launchpad Contributions:\n"
" Ayhan YALÇINSOY https://launchpad.net/~ayhanyalcinsoy\n"
+" Baris Ata https://launchpad.net/~brsata\n"
" Ferhat TUNÇTAN https://launchpad.net/~ferhattnctn66\n"
-" Halit Alptekin https://launchpad.net/~diqit4ll\n"
+" Halit Alptekin https://launchpad.net/~halitalptekin\n"
" Hasan Yılmaz https://launchpad.net/~hasanyilmaz\n"
" Irmak Bıçakçıgil https://launchpad.net/~irmak\n"
+" Metin Şanlı https://launchpad.net/~metinsanli\n"
" Sadık Atalay https://launchpad.net/~seaflames\n"
" Selim Sırrı Sevgi https://launchpad.net/~selimssevgi\n"
+" Seçgin Karagülle https://launchpad.net/~secgink-57\n"
" Utku BERBEROĞLU https://launchpad.net/~boluluutku\n"
" WebKit Team https://launchpad.net/~webkit-team\n"
" c.k. https://launchpad.net/~cankutay-eser\n"
+" circass https://launchpad.net/~erdincgultekin\n"
" kulkke https://launchpad.net/~kulkke\n"
" seaflames https://launchpad.net/~protoman-s\n"
" Çağatay Çöl https://launchpad.net/~cagataycol"
diff --git a/po/ug.po b/po/ug.po
index 09578b98..3a5f03ee 100644
--- a/po/ug.po
+++ b/po/ug.po
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:23+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:18+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: \n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
diff --git a/po/uk.po b/po/uk.po
index f1bb30c3..c73ae335 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: midori svn\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-06-02 11:54+0000\n"
+"PO-Revision-Date: 2013-09-30 07:48+0000\n"
"Last-Translator: WebKit Team <Unknown>\n"
"Language-Team: Ukrainian <translation@linux.org.ua>\n"
"MIME-Version: 1.0\n"
@@ -17,8 +17,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:23+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:18+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: uk\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
@@ -531,6 +531,7 @@ msgstr ""
"\n"
"Launchpad Contributions:\n"
" Knedlyk https://launchpad.net/~yupadmin\n"
+" Ksenia Dylova https://launchpad.net/~ksjenka\n"
" Pavlo Bilyak https://launchpad.net/~pavlo1997\n"
" WebKit Team https://launchpad.net/~webkit-team"
diff --git a/po/vi.po b/po/vi.po
index 42e50043..de5e6284 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:23+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:18+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 3d42416b..4018efd1 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -11,15 +11,15 @@ msgstr ""
"Project-Id-Version: midori\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-08-13 01:22+0000\n"
+"PO-Revision-Date: 2013-11-16 13:40+0000\n"
"Last-Translator: Yangyu Huang <Unknown>\n"
"Language-Team: Chinese (Simplified) <xfce-i18n-cn@xfce.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2013-08-14 04:39+0000\n"
-"X-Generator: Launchpad (build 16723)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:19+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
"Language: zh_CN\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
@@ -1592,7 +1592,7 @@ msgstr "默认页面放大比例"
#: ../midori/midori-preferences.c:410
msgid "Initial factor to enlarge newly opened tabs by"
-msgstr ""
+msgstr "放大新打开的标签的初始因子:"
#: ../midori/midori-preferences.c:414
msgid "Preferred languages"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index e9cd0c10..12031c1e 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -9,15 +9,15 @@ msgstr ""
"Project-Id-Version: midori master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-27 12:55-0500\n"
-"PO-Revision-Date: 2013-06-15 16:35+0000\n"
+"PO-Revision-Date: 2013-10-11 11:23+0000\n"
"Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n"
"Language-Team: chinese-l10n <chinese-l10n@googlegroups.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2013-07-29 05:23+0000\n"
-"X-Generator: Launchpad (build 16700)\n"
+"X-Launchpad-Export-Date: 2014-01-22 05:19+0000\n"
+"X-Generator: Launchpad (build 16901)\n"
#: ../data/midori.desktop.in.h:1 ../midori/main.c:142
#: ../midori/midori-websettings.c:225
@@ -1130,30 +1130,30 @@ msgstr "%s 想要知道您的所在位置。"
#: ../midori/midori-view.c:1250
#, c-format
msgid "'%s' can't be found"
-msgstr ""
+msgstr "找不到「%s」"
#: ../midori/midori-view.c:1251
#, c-format
msgid "The page '%s' couldn't be loaded:"
-msgstr ""
+msgstr "無法載入「%s」頁面:"
#: ../midori/midori-view.c:1255
msgid "Check the address for typos"
-msgstr ""
+msgstr "請檢查位址是否有打字有誤"
#: ../midori/midori-view.c:1256
msgid ""
"Make sure that an ethernet cable is plugged in or the wireless card is "
"activated"
-msgstr ""
+msgstr "請確認乙太網路線是否插入,或是無線網卡是否有啟動"
#: ../midori/midori-view.c:1257
msgid "Verify that your network settings are correct"
-msgstr ""
+msgstr "請驗證您的網路設定是否正確"
#: ../midori/midori-view.c:1261
msgid "Try Again"
-msgstr ""
+msgstr "再試一次"
#: ../midori/midori-view.c:1386
#, c-format
@@ -1184,7 +1184,7 @@ msgstr "審閱元素(_E)"
#: ../midori/midori-view.c:2472
msgid "Open _Link"
-msgstr ""
+msgstr "開啟連結(_L)"
#: ../midori/midori-view.c:2478
msgid "Open Link in New _Tab"
@@ -1341,7 +1341,7 @@ msgstr "中括號內的版本編號顯示執行時期使用的版本。"
#: ../midori/midori-view.c:4208
msgid "Page loading delayed:"
-msgstr ""
+msgstr "網頁載入延遲:"
#: ../midori/midori-view.c:4209
msgid "Loading delayed either due to a recent crash or startup preferences."
@@ -1580,11 +1580,11 @@ msgstr "是否允許指令稿自動開啟彈出視窗"
#: ../midori/midori-preferences.c:406
msgid "Default Zoom Level"
-msgstr ""
+msgstr "預設遠近等級"
#: ../midori/midori-preferences.c:410
msgid "Initial factor to enlarge newly opened tabs by"
-msgstr ""
+msgstr "新開啟分頁的初始放大係數"
#: ../midori/midori-preferences.c:414
msgid "Preferred languages"
@@ -1790,7 +1790,7 @@ msgstr "無法儲存搜尋引擎。%s"
#: ../midori/midori-historycompletion.vala:17
msgid "Bookmarks and History"
-msgstr ""
+msgstr "書籤與歷史"
#: ../midori/midori-historycompletion.vala:54
#, c-format
@@ -2764,7 +2764,7 @@ msgstr "無法 DETACH "
#: ../midori/midori-bookmarks.c:257
#, c-format
msgid "Couldn't setup bookmarks: %s\n"
-msgstr ""
+msgstr "無法設置書籤:%s\n"
#: ../midori/midori-bookmarks.c:271
#, c-format
@@ -3101,7 +3101,7 @@ msgstr "針對各個網站管理訊餅的許可與否"
#: ../extensions/apps.vala:58
#, c-format
msgid "Failed to fetch application icon in %s: %s"
-msgstr ""
+msgstr "無法擷取 %s 中的應用程式圖示:%s"
#: ../extensions/apps.vala:84
msgid "Launcher created"
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 6a589cab..7782ff77 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -12,45 +12,41 @@ include_directories(
${CMAKE_BINARY_DIR}
"${CMAKE_BINARY_DIR}/midori"
)
-file(GLOB TESTS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.c)
+file(GLOB TESTS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.c *.vala)
foreach(UNIT_SRC ${TESTS})
- string(REPLACE ".c" "" UNIT ${UNIT_SRC})
- add_executable(${UNIT} ${UNIT_SRC})
- add_test(NAME ${UNIT} COMMAND ${UNIT})
- contain_test(${UNIT})
- target_link_libraries(${UNIT}
- ${LIBMIDORI}
- )
- set_target_properties(${UNIT} PROPERTIES
- COMPILE_FLAGS ${CFLAGS}
- )
-endforeach ()
+ if (${UNIT_SRC} MATCHES "(.vala)$")
+ string(REPLACE ".vala" "" UNIT ${UNIT_SRC})
+ include(ValaPrecompile)
+ vala_precompile(UNIT_SRC_C ${UNIT}
+ ${UNIT_SRC}
+ PACKAGES
+ ${PKGS}
+ OPTIONS
+ ${VALAFLAGS}
+ CUSTOM_VAPIS
+ ${EXTRA_VAPIS}
+ "${CMAKE_SOURCE_DIR}/midori/midori.vapi"
+ "${CMAKE_SOURCE_DIR}/katze/katze.vapi"
+ "${CMAKE_BINARY_DIR}/midori/${LIBMIDORI}.vapi"
+ )
+
+ add_executable(${UNIT} ${UNIT_SRC_C})
+ set_target_properties(${UNIT} PROPERTIES
+ COMPILE_FLAGS "${VALA_CFLAGS}"
+ )
+ else()
+ string(REPLACE ".c" "" UNIT ${UNIT_SRC})
+ add_executable(${UNIT} ${UNIT_SRC})
+ set_target_properties(${UNIT} PROPERTIES
+ COMPILE_FLAGS ${CFLAGS}
+ )
+ endif()
-file(GLOB TESTS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.vala)
-foreach(UNIT_SRC ${TESTS})
- string(REPLACE ".vala" "" UNIT ${UNIT_SRC})
- include(ValaPrecompile)
- vala_precompile(UNIT_SRC_C ${UNIT}
- ${UNIT_SRC}
- PACKAGES
- ${PKGS}
- OPTIONS
- ${VALAFLAGS}
- CUSTOM_VAPIS
- ${EXTRA_VAPIS}
- "${CMAKE_SOURCE_DIR}/midori/midori.vapi"
- "${CMAKE_SOURCE_DIR}/katze/katze.vapi"
- "${CMAKE_BINARY_DIR}/midori/${LIBMIDORI}.vapi"
- )
- add_executable(${UNIT} ${UNIT_SRC_C})
- add_test(NAME ${UNIT} COMMAND ${UNIT})
- contain_test(${UNIT})
target_link_libraries(${UNIT}
${LIBMIDORI}
)
- set_target_properties(${UNIT} PROPERTIES
- COMPILE_FLAGS "${VALA_CFLAGS}"
- )
+ add_test(NAME ${UNIT} COMMAND ${UNIT})
+ contain_test (${UNIT})
endforeach ()
file(GLOB TESTS *.sh)
diff --git a/tests/app.vala b/tests/app.vala
index d9790231..b024f468 100644
--- a/tests/app.vala
+++ b/tests/app.vala
@@ -18,40 +18,38 @@ bool check_sensible_window_size (Gtk.Window window, Midori.WebSettings settings)
void app_normal () {
Midori.Test.grab_max_timeout ();
-
Midori.Test.idle_timeouts ();
Midori.Test.log_set_fatal_handler_for_icons ();
Midori.Paths.Test.reset_runtime_mode ();
Midori.App.set_instance_is_running (false);
var app = Midori.normal_app_new (null, "test-normal", false, null, null, -1, null);
var loop = MainContext.default ();
- do { loop.iteration (true); } while (loop.pending ());
- for (var i = 0 ; i < 7; i++) {
+ do { loop.iteration (true); } while (app.browser == null);
+ for (var i = 0 ; i < 3; i++) {
var tab = app.browser.add_uri ("about:blank") as Midori.View;
app.browser.close_tab (tab);
do { loop.iteration (true); } while (loop.pending ());
}
Midori.normal_app_on_quit (app);
- /* FIXME
- for (var i = 0 ; i < 7; i++) {
- app.settings.maximum_cache_size++;
- do { loop.iteration (true); } while (loop.pending ());
- }
- */
-
Midori.Test.release_max_timeout ();
}
void app_normal_custom_config () {
+ Midori.Test.grab_max_timeout ();
+ Midori.Test.idle_timeouts ();
Midori.Test.log_set_fatal_handler_for_icons ();
Midori.Paths.Test.reset_runtime_mode ();
Midori.App.set_instance_is_running (false);
- var app = Midori.normal_app_new (Midori.Paths.make_tmp_dir ("custom-configXXXXXX"),
+ string? config_dir = null;
+ try {
+ config_dir = DirUtils.make_tmp ("custom-configXXXXXX");
+ } catch (Error error) {
+ GLib.error (error.message);
+ }
+ var app = Midori.normal_app_new (config_dir,
"test-custom-config-normal", false, null, null, -1, null);
- var loop = MainContext.default ();
- do { loop.iteration (true); } while (app.browser == null);
- assert (check_sensible_window_size (app.browser, app.settings));
Midori.normal_app_on_quit (app);
+ Midori.Test.release_max_timeout ();
}
void app_private () {
@@ -82,94 +80,6 @@ void app_web_custom_config () {
assert (check_sensible_window_size (browser, browser.settings));
}
-
-void app_extensions_load () {
- Midori.Test.grab_max_timeout ();
-
- Midori.Test.idle_timeouts ();
- Midori.Test.log_set_fatal_handler_for_icons ();
- Midori.Paths.Test.reset_runtime_mode ();
- Midori.App.set_instance_is_running (false);
- var app = Midori.normal_app_new (null, "test-extensions-normal", false, null, null, -1, null);
- var loop = MainContext.default ();
- do { loop.iteration (true); } while (loop.pending ());
- /* No extensions loaded */
- assert (app.extensions.get_length () == 0);
- Midori.Extension.load_from_folder (app, null, false);
- /* All extensions loaded, inactive */
- assert (app.extensions.get_length () > 0);
-
- /* Number of expected extensions matches */
- /* FIXME Counting .so/dll doesn't see multiple extensions in one binary
- Dir dir;
- try {
- dir = Dir.open (Midori.Paths.get_lib_path (PACKAGE_NAME), 0);
- }
- catch (Error error) {
- GLib.error (error.message);
- }
- uint count = 0;
- string? name;
- while ((name = dir.read_name ()) != null) {
- if (name.has_suffix (GLib.Module.SUFFIX))
- count++;
- }
- assert (app.extensions.get_length () == count); */
-
- foreach (var item in app.extensions.get_items ())
- assert (!(item as Midori.Extension).is_active ());
-
- for (var i = 0 ; i < 7; i++) {
- var tab = app.browser.add_uri ("about:blank") as Midori.View;
- app.browser.close_tab (tab);
- }
- do { loop.iteration (true); } while (loop.pending ());
-
- /*
- Midori.Test.release_max_timeout ();
-}
-
-void app_extensions_activate () {
- Midori.Test.grab_max_timeout ();
-
- Midori.Test.idle_timeouts ();
- Midori.Test.log_set_fatal_handler_for_icons ();
- Midori.Paths.Test.reset_runtime_mode ();
- Midori.App.set_instance_is_running (false);
- var app = Midori.normal_app_new (null, "test-extensions-normal", false, null, null, -1, null);
- var loop = MainContext.default ();
- do { loop.iteration (true); } while (loop.pending ());
- Midori.Extension.load_from_folder (app, null, false);
-
- assert (app.extensions.get_length () > 0);
- */
-
- foreach (var item in app.extensions.get_items ()) {
- stdout.printf ("- %s\n", (item as Midori.Extension).name);
- (item as Midori.Extension).activate (app);
- }
- do { loop.iteration (true); } while (loop.pending ());
-
- for (var i = 0 ; i < 7; i++) {
- var tab = app.browser.add_uri ("about:blank") as Midori.View;
- app.browser.close_tab (tab);
- }
- do { loop.iteration (true); } while (loop.pending ());
-
- foreach (var item in app.extensions.get_items ())
- (item as Midori.Extension).deactivate ();
- do { loop.iteration (true); } while (loop.pending ());
-
- for (var i = 0 ; i < 7; i++) {
- var tab = app.browser.add_uri ("about:blank") as Midori.View;
- app.browser.close_tab (tab);
- do { loop.iteration (true); } while (loop.pending ());
- }
-
- Midori.Test.release_max_timeout ();
-}
-
-
void main (string[] args) {
Test.init (ref args);
Midori.App.setup (ref args, null);
@@ -178,8 +88,6 @@ void main (string[] args) {
Test.add_func ("/app/private", app_private);
Test.add_func ("/app/web", app_web);
Test.add_func ("/app/web-custom-config", app_web_custom_config);
- Test.add_func ("/app/extensions-load", app_extensions_load);
- /* Test.add_func ("/app/extensions-activate", app_extensions_activate); */
Test.run ();
}
diff --git a/tests/browser.c b/tests/browser.c
index 8e5ab9b2..b0d0d802 100644
--- a/tests/browser.c
+++ b/tests/browser.c
@@ -43,7 +43,7 @@ browser_create (void)
midori_settings_set_download_folder (MIDORI_SETTINGS (settings), temporary_downloads);
midori_browser_save_uri (browser, MIDORI_VIEW (view), NULL);
- filename = midori_view_save_source (MIDORI_VIEW (view), NULL, NULL);
+ filename = midori_view_save_source (MIDORI_VIEW (view), NULL, NULL, FALSE);
filename2 = g_filename_from_uri (uri, NULL, NULL);
g_assert_cmpstr (filename, ==, filename2);
g_free (filename);
diff --git a/tests/completion.vala b/tests/completion.vala
index 231cf3da..8abaf4db 100644
--- a/tests/completion.vala
+++ b/tests/completion.vala
@@ -87,35 +87,43 @@ void completion_autocompleter () {
error ("Expected %d but got %d", 3, n);
}
-struct TestCaseCompletion {
- public string prefix;
- public string text;
- public int expected_count;
-}
-
-const TestCaseCompletion[] completions = {
- { "history", "example", 1 }
-};
-
-async void complete_spec (Midori.Completion completion, TestCaseCompletion spec) {
- assert (completion.can_complete (spec.text));
+async void complete_history (Midori.HistoryDatabase history) {
+ try {
+ history.insert ("http://example.com", "Ejemplo", 0, 0);
+ } catch (Error error) {
+ assert_not_reached ();
+ }
var cancellable = new Cancellable ();
- var suggestions = yield completion.complete (spec.text, null, cancellable);
- if (spec.expected_count != suggestions.length ())
- error ("%u expected for %s/ %s but got %u",
- spec.expected_count, spec.prefix, spec.text, suggestions.length ());
+ var results = yield history.list_by_count_with_bookmarks ("example", 1, cancellable);
+ assert (results.length () == 1);
+ var first = results.nth_data (0);
+ assert (first.title == "Ejemplo");
+ results = yield history.list_by_count_with_bookmarks ("ejemplo", 1, cancellable);
+ assert (results.length () == 1);
+ first = results.nth_data (0);
+ assert (first.title == "Ejemplo");
+ complete_history_done = true;
}
+bool complete_history_done = false;
void completion_history () {
- Sqlite.Database db;
- assert (Sqlite.Database.open_v2 (Midori.Paths.get_config_filename_for_writing ("bookmarks_v2.db"), out db) == Sqlite.OK);
- assert (db.exec ("CREATE TABLE bookmarks (uri TEXT, title TEXT, last_visit DATE);") == Sqlite.OK);
-
- var completion = new Midori.HistoryCompletion ();
var app = new Midori.App ();
- completion.prepare (app);
- foreach (var spec in completions)
- complete_spec.begin (completion, spec);
+ Midori.HistoryDatabase history;
+ try {
+ var bookmarks_database = new Midori.BookmarksDatabase ();
+ assert (bookmarks_database.db != null);
+ history = new Midori.HistoryDatabase (app);
+ assert (history.db != null);
+ history.clear (0);
+ } catch (Midori.DatabaseError error) {
+ assert_not_reached();
+ }
+
+ Midori.Test.grab_max_timeout ();
+ var loop = MainContext.default ();
+ complete_history.begin (history);
+ do { loop.iteration (true); } while (!complete_history_done);
+ Midori.Test.release_max_timeout ();
}
struct TestCaseRender {
diff --git a/tests/extensions.c b/tests/extensions.c
index 34fadb7e..26d4d379 100644
--- a/tests/extensions.c
+++ b/tests/extensions.c
@@ -160,6 +160,7 @@ extension_settings (void)
midori_extension_set_string_list (extension, "pets", names, 2);
g_strfreev (names);
names = midori_extension_get_string_list (extension, "pets", &names_n);
+ g_strfreev (names);
g_assert_cmpint (names_n, ==, 2);
midori_extension_deactivate (extension);
}
diff --git a/tests/license.sh b/tests/license.sh
index 70e4c13d..728209c7 100755
--- a/tests/license.sh
+++ b/tests/license.sh
@@ -9,5 +9,5 @@ echo Running 'licensecheck'
test -z $(which licensecheck) && echo ...SKIPPED: not installed && return 0
test -n "$SRCDIR" && cd $SRCDIR
test -z "$BLDDIR" && BLDDIR=_build
-find . \! -path './.*/*' -a \! -path "./$BLDDIR/*" -a \! -path "./debian/*" | xargs licensecheck | grep UNKNOWN && exit 1
+find . \! -path './.*/*' -a \! -path "./$BLDDIR/*" -a \! -path "./_*/*" -a \! -path "./debian/*" | xargs licensecheck | grep UNKNOWN && exit 1
echo ...OK
diff --git a/tests/potfiles.sh b/tests/potfiles.sh
index 655dd29e..e6330c66 100755
--- a/tests/potfiles.sh
+++ b/tests/potfiles.sh
@@ -8,7 +8,7 @@
echo Checking POTFILES.in for completeness
test -n "$SRCDIR" && cd $SRCDIR
test -z "$BLDDIR" && BLDDIR=_build
-for i in $(find . -regextype posix-egrep \! -regex "./($BLDDIR|debian|tests)/.+" -a -regex './[^.]+.+[.](vala|c)'); do
+for i in $(find . -regextype posix-egrep \! -regex "./($BLDDIR|_.+|debian|tests)/.+" -a -regex './[^.]+.+[.](vala|c)'); do
grep -q $(basename $i) po/POTFILES.in || FILES="$FILES$i\n"
done
test -n "$FILES" && echo "$FILES...FAILED"
diff --git a/tests/speeddial.vala b/tests/speeddial.vala
index 849aba88..20d12485 100644
--- a/tests/speeddial.vala
+++ b/tests/speeddial.vala
@@ -14,7 +14,11 @@ string get_test_file (string contents) {
tmp_folder = Midori.Paths.make_tmp_dir ("speeddialXXXXXX");
string checksum = Checksum.compute_for_string (ChecksumType.MD5, contents);
string file = Path.build_path (Path.DIR_SEPARATOR_S, tmp_folder, checksum);
- FileUtils.set_contents (file, contents, -1);
+ try {
+ FileUtils.set_contents (file, contents, -1);
+ } catch (Error file_error) {
+ GLib.error (file_error.message);
+ }
return file;
}
@@ -57,12 +61,16 @@ static void speeddial_load () {
}
catch (Error error) { /* Error expected: pass */ }
- dial_data.save_message ("speed_dial-save-rename 1 Lorem");
- Katze.assert_str_equal (data, dial_data.keyfile.get_string ("Dial 1", "title"), "Lorem");
- dial_data.save_message ("speed_dial-save-rename 1 Lorem Ipsum Dolomit");
- Katze.assert_str_equal (data, dial_data.keyfile.get_string ("Dial 1", "title"), "Lorem Ipsum Dolomit");
- dial_data.save_message ("speed_dial-save-delete 1");
- Katze.assert_str_equal (data, dial_data.get_next_free_slot (), "Dial 1");
+ try {
+ dial_data.save_message ("speed_dial-save-rename 1 Lorem");
+ Katze.assert_str_equal (data, dial_data.keyfile.get_string ("Dial 1", "title"), "Lorem");
+ dial_data.save_message ("speed_dial-save-rename 1 Lorem Ipsum Dolomit");
+ Katze.assert_str_equal (data, dial_data.keyfile.get_string ("Dial 1", "title"), "Lorem Ipsum Dolomit");
+ dial_data.save_message ("speed_dial-save-delete 1");
+ Katze.assert_str_equal (data, dial_data.get_next_free_slot (), "Dial 1");
+ } catch (Error message_error) {
+ GLib.error (message_error.message);
+ }
data = get_test_file ("""
[settings]
@@ -79,9 +87,13 @@ static void speeddial_load () {
""");
dial_data = new Midori.SpeedDial (data, "");
FileUtils.remove (data);
- Katze.assert_str_equal (data, dial_data.get_next_free_slot (), "Dial 1");
- dial_data.save_message ("speed_dial-save-swap 2 4");
- Katze.assert_str_equal (data, dial_data.keyfile.get_string ("Dial 2", "title"), "IT-News");
+ try {
+ Katze.assert_str_equal (data, dial_data.get_next_free_slot (), "Dial 1");
+ dial_data.save_message ("speed_dial-save-swap 2 4");
+ Katze.assert_str_equal (data, dial_data.keyfile.get_string ("Dial 2", "title"), "IT-News");
+ } catch (Error message_error) {
+ GLib.error (message_error.message);
+ }
}
void main (string[] args) {
diff --git a/tests/tab.vala b/tests/tab.vala
index 5018a25b..d23486fc 100644
--- a/tests/tab.vala
+++ b/tests/tab.vala
@@ -91,21 +91,21 @@ void tab_special () {
tab.set_uri ("about:blank");
do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
assert (tab.is_blank ());
- assert (!tab.can_view_source ());
+ assert (tab.can_view_source ());
assert (tab.special);
assert (!tab.can_save ());
tab.set_uri ("about:private");
do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
assert (tab.is_blank ());
- assert (!tab.can_view_source ());
+ assert (tab.can_view_source ());
assert (tab.special);
assert (!tab.can_save ());
tab.set_uri ("http://.invalid");
do { loop.iteration (true); } while (tab.load_status != Midori.LoadStatus.FINISHED);
assert (!tab.is_blank ());
- assert (!tab.can_view_source ());
+ assert (tab.can_view_source ());
assert (tab.special);
assert (!tab.can_save ());
@@ -206,15 +206,15 @@ void tab_http () {
source.web_view.load_uri (test_url);
do { loop.iteration (true); } while (source.load_status != Midori.LoadStatus.FINISHED);
assert (!source.is_blank ());
- assert (!source.can_view_source ());
+ /* FIXME assert (!source.can_view_source ()); */
assert (!source.special);
/* FIXME assert (source.can_save ()); */
- assert (source.view_source);
+ /* FIXME assert (source.view_source); */
source.set_uri ("http://.invalid");
do { loop.iteration (true); } while (source.load_status != Midori.LoadStatus.FINISHED);
assert (!source.is_blank ());
- assert (!source.can_view_source ());
+ assert (source.can_view_source ());
assert (source.special);
assert (!source.can_save ());
assert (!source.view_source);
@@ -259,6 +259,36 @@ void tab_download_dialog () {
assert (!did_request_download);
}
+void tab_scroll () {
+ /* ensure that no scrolls occur due to error iframes */
+ var markup = "<style>p{height: 90%}</style><p></p><iframe src=\"http://.invalid/\" height=\"90%\"/>";
+ Midori.Test.grab_max_timeout ();
+
+ Midori.Test.idle_timeouts ();
+ Midori.Test.log_set_fatal_handler_for_icons ();
+ var browser = new Midori.Browser ();
+ var settings = new Midori.WebSettings ();
+ browser.set ("settings", settings);
+ var loop = MainContext.default ();
+ do { loop.iteration (true); } while (loop.pending ());
+ for (var i = 0 ; i < 7; i++) {
+ var tab = browser.add_uri ("data:text/html;charset=utf-8;base64," +
+ GLib.Base64.encode (markup.data)) as Midori.Tab;
+ #if HAVE_GTK3
+ var vadj = (tab.web_view as Gtk.Scrollable).get_vadjustment ();
+ #else
+ var vadj = (tab.web_view.get_parent () as Gtk.ScrolledWindow).get_vadjustment ();
+ #endif
+ vadj.value_changed.connect ((vadj) => {
+ assert(vadj.get_value () == vadj.get_lower ());
+ });
+ do { loop.iteration (true); } while (tab.progress != 0.0);
+ browser.close_tab (tab as Midori.View);
+ }
+
+ Midori.Test.release_max_timeout ();
+}
+
void main (string[] args) {
Test.init (ref args);
Midori.App.setup (ref args, null);
@@ -274,6 +304,7 @@ void main (string[] args) {
Test.add_func ("/tab/http", tab_http);
Test.add_func ("/tab/movement", tab_movement);
Test.add_func ("/tab/download", tab_download_dialog);
+ Test.add_func ("/tab/scroll", tab_scroll);
Test.run ();
}
diff --git a/tests/wscript_build b/tests/wscript_build
deleted file mode 100644
index 21c5c4ca..00000000
--- a/tests/wscript_build
+++ /dev/null
@@ -1,59 +0,0 @@
-#! /usr/bin/env python
-# WAF build script for midori
-# This file is licensed under the terms of the expat license, see the file EXPAT.
-
-import os
-import sys
-import Utils
-
-tests = os.listdir ('tests')
-for test in tests:
- folder = 'tests' + os.sep + test
- if os.path.isdir (folder):
- files = os.listdir (folder)
- target = test
- source = ''
- for fila in files:
- if fila[-2:] == '.c' or fila[-5:] == '.vala':
- source += ' ' + test + os.sep + fila
- if not source:
- Utils.pprint ('RED', folder + ': No source files found')
- sys.exit (1)
-
- elif test[-3:] == '.py' or test[-3:] == '.sh':
- obj = bld.new_task_gen ('command-output')
- obj.no_inputs = obj.no_outputs = obj.command_is_external = True
- obj.command = ['python', 'sh'][test[-3:] == '.sh']
- os.environ['SRCDIR'] = os.getcwd ()
- os.environ['BLDDIR'] = '_build'
- obj.argv = [os.path.join (os.getcwd (), folder)]
- continue
- elif test[-2:] == '.c':
- target = test[:-2]
- source = test
- elif test[-5:] == '.vala':
- target = test[:-5]
- source = test
- else:
- Utils.pprint ('YELLOW', folder + ': Skipped')
- continue
-
- obj = bld.new_task_gen ('cc', 'program')
- obj.target = 'test-' + target
- obj.includes = '.. ../midori ../panels'
- obj.source = source
- if 'vala' in source:
- obj.env.append_value ('CCFLAGS', '-w')
- obj.vapi_dirs = '../midori ../katze'
- obj.packages = 'glib-2.0 gio-2.0 libsoup-2.4 sqlite3 katze midori midori-core'
- if bld.env['HAVE_GTK3']:
- obj.packages += ' gtk+-3.0'
- else:
- obj.packages += ' gtk+-2.0'
- if bld.env['HAVE_WEBKIT2']:
- obj.packages += ' webkit2gtk-3.0'
- else:
- obj.packages += ' webkitgtk-3.0'
- obj.uselib = 'UNIQUE LIBSOUP GIO GTK SQLITE WEBKIT LIBXML GRANITE ZEITGEIST'
- obj.uselib_local = 'midori-c'
- obj.unit_test = 1
diff --git a/tools/midori-dev b/tools/midori-dev
index e7e36066..6da645d5 100755
--- a/tools/midori-dev
+++ b/tools/midori-dev
@@ -41,7 +41,7 @@ fi
case $CMD in
bzr)
- exec ./waf build --run "$@" >& $LOG
+ exec _build/midori/midori "$@" >& $LOG
;;
gdb)
gdb $BIN core
diff --git a/tools/release b/tools/release
index e4a890e0..6c12039d 100755
--- a/tools/release
+++ b/tools/release
@@ -9,11 +9,11 @@
#
# See the file COPYING for the full license text.
-OLDVER=$(grep --color=no 'VERSION = VERSION_FULL = ' wscript | sed -r "s@.+ = '(.+)'@\1@")
+OLDVER=$(grep -r --color=no '^set(VERSION' CMakeLists.txt | sed -r "s@.+ ([0-9.]+)\)@\1@")
NEWVER=$(python -c "print('0.'+str(float('$OLDVER'[2:])+.1))")
if [ "x$1" = "xbefore" ]; then
echo Bumping from $OLDVER to $NEWVER
- sed -i "s@$OLDVER@$NEWVER@g" wscript win32/makedist/midori.nsi
+ sed -i "s@$OLDVER@$NEWVER@g" CMakeLists.txt win32/makedist/midori.nsi
echo; echo v$NEWVER:; bzr log --line -rtag:$OLDVER.. | sed -r 's@.+2013-[0-9]+-[0-9]+ @@' | sed 's@\[merge\] @@' | grep -v -E 'l10n|makedist|tools(/release)?: |nsi|translation|Bump version to|Merge lp:midori|POTFILES.in'; echo
curl http://wiki.xfce.org/_export/raw/midori/contribute | \
sed -r 's@\[\[([^|]+)\|([^]]+)\]\]@\1 \2@g' | \
@@ -22,6 +22,7 @@ if [ "x$1" = "xbefore" ]; then
sed 's@This is a list of frequently asked questions@This is <a href="http://wiki.xfce.org/midori/faq">a snapshot of the online FAQ</a>@g' | \
sed 's@<link rel="style.*>@<link rel="stylesheet" href="faq.css" />@g' > data/faq.html
elif [ "x$1" = "xafter" ]; then
+ NEWVER=$OLDVER
echo -n bzr commit -p -m "'Bump version to $NEWVER'"
case $SHELL in
*fish*)
diff --git a/waf b/waf
deleted file mode 100755
index 212113de..00000000
--- a/waf
+++ /dev/null
Binary files differ
diff --git a/win32/makedist/makedist.midori b/win32/makedist/makedist.midori
index 68c74601..9f25b51a 100755
--- a/win32/makedist/makedist.midori
+++ b/win32/makedist/makedist.midori
@@ -23,6 +23,7 @@
# a bit of configuration
root_dir=$MINGW_PREFIX
+where_am_i=$PWD
if [ "$GSTREAMER_API_VERSION" == "" ]; then
GSTREAMER_API_VERSION=0.10
@@ -39,8 +40,14 @@ temp_dir=`mktemp -d`
# check if we can use 7zip
have_7zip=`which 7za`
-grep -q gtk-3.0 _build/config.log && GTK3_BUILD=1
-version=`grep PACKAGE_VERSION _build/default/config.h | awk '{ print $3 $4; }' | sed 's@(debug)@-debug@g'|sed 's@"@@g'`
+GTK3_BUILD=1
+# Default to gtk3 but check just in case
+GTK3=$(grep GTK3 CMakeCache.txt | awk -F \= '{print $2}')
+if [ "$GTK3" != "ON" ] && [ "$GTK3" != "1" ];then
+ GTK3_BUILD=0
+fi
+
+version=$(grep PACKAGE_VERSION ./midori/CMakeFiles/midori.dir/DependInfo.cmake|sed -e 's/^.*PACKAGE_VERSION=\\"\([^"]*\)\\".*$/\1/')
#strip sha from version if release
if [ "$RELEASE" != "" ];then
@@ -71,9 +78,8 @@ else
fi
if [ "NSIS" != "" ];then
- where_am_i=$PWD
- cp -a $where_am_i/win32/makedist/midori.nsi $temp_dir
- cp -a $where_am_i/win32/makedist/midori.ico $temp_dir
+ cp -a $where_am_i/../win32/makedist/midori.nsi $temp_dir
+ cp -a $where_am_i/../win32/makedist/midori.ico $temp_dir
fi
# function: dll-recursive <list of exe and dll files ...>
@@ -119,6 +125,32 @@ grab_files ()
popd > /dev/null
}
+grab_icons()
+{
+ local theme="$1"
+ local list="$2"
+
+ sizes=$(grep CreateDirectory $list |awk -F '"' '{print $2}' |awk -F '\' '{print $6}')
+ categories=$(grep InstallIconTheme $list | awk -F '"' '{print $2}'|sort|uniq)
+
+
+ for category in $categories
+ do
+ category_icons=$(grep InstallIconTheme $list |grep $category|awk -F '"' '{print $4}')
+ for size in $sizes
+ do
+ mkdir -p $workdir/share/icons/$theme/$category/$size
+ for icon in $category_icons
+ do
+ cp -L /usr/share/icons/$theme/$category/$size/$icon.* $workdir/share/icons/$theme/$category/$size/
+ done
+ done
+ done
+
+ cp -L /usr/share/icons/$theme/index.theme $workdir/share/icons/$theme
+
+}
+
echo "Creating $ARCHIVE"
# create destination folder
@@ -132,10 +164,19 @@ pushd $root_dir/bin > /dev/null
dll_recursive midori*.exe gspawn-*-helper*.exe libhunspell*.dll > $temp_dir/midori.exe.lst
dll_recursive ../lib/gio/modules/*.dll >> $temp_dir/midori.exe.lst
dll_recursive iconv.dll >> $temp_dir/midori.exe.lst
-dll_recursive ../lib/gstreamer-$GSTREAMER_API_VERSION/*.dll >> $temp_dir/midori.exe.lst
# we ship gdb now for -g and diagnostic button
dll_recursive gdb.exe >> $temp_dir/midori.exe.lst
+for i in $(cat $temp_dir/midori.exe.lst | grep -v midori | sort | uniq)
+do
+ if [ -f $root_dir/bin/$i ]; then
+ rpm -qf $root_dir/bin/$i >> $temp_dir/packages_used.lst
+ fi
+done
+
+dll_recursive ../lib/gstreamer-$GSTREAMER_API_VERSION/*.dll >> $temp_dir/midori.exe.lst
+rpm -qf $root_dir/lib/gstreamer-$GSTREAMER_API_VERSION/*.dll >> $temp_dir/packages_used.lst
+
if [ "$DEBUG_BUILD" != "" ]; then
dll_recursive GtkLauncher.exe >> $temp_dir/midori.exe.lst
fi
@@ -197,17 +238,19 @@ echo "<*> Copying resources and translations..."
# copy share
grab_files share midori
-grab_files share icons
grab_files share mime
grab_files share midori.mo
+grab_icons Faenza $where_am_i/../win32/makedist/midori.nsi
+
# We need to ship our CA bundle for now
cp -a /etc/pki/tls/certs/ca-bundle.crt $workdir/share/midori/res/
if [ "$GTK3_BUILD" == "1" ]; then
grab_files share webkitgtk-3.0
grab_files share schemas
- grab_files share/themes/Greybird/ gtk-3.0
+ mkdir -p $workdir/share/themes/Greybird
+ cp -Lr /usr/share/themes/Greybird/gtk-3.0 $workdir/share/themes/Greybird
MO_VER=30
else
grab_files share MS-Windows
@@ -221,6 +264,10 @@ if [ "$DEBUG_BUILD" == "" ];then
popd > /dev/null
fi
+rpm -qf /etc/pki/tls/certs/ca-bundle.crt >> $temp_dir/packages_used.lst
+rpm -qf /usr/share/icons/Faenza/ >> $temp_dir/packages_used.lst
+rpm -qf /usr/share/themes/Greybird/gtk-3.0 >> $temp_dir/packages_used.lst
+
# copy locales for gtk
# so we have translated stock items, file dialogs
@@ -266,6 +313,20 @@ gtk-toolbar-style = GTK_TOOLBAR_ICONS
gtk-toolbar-icon-size = GTK_ICON_SIZE_MENU
_EOF
+mkdir -p $workdir/etc/xdg/midori
+
+cat >> $workdir/etc/xdg/midori/config << _EOF
+[settings]
+default-font-family=Times New Roman
+monospace-font-family=Courier New
+default-font-size=14
+default-monospace-font-size=14
+_EOF
+
+# Don't hardcode mingw path, otherwise fontconfig uses fallback settings
+# which tend to look very bad on Windows
+sed -r 's@>.+(conf\.d)<@>\1@g' -i $workdir/etc/fonts/fonts.conf
+
popd > /dev/null
echo "<*> Copying docs..."
@@ -273,6 +334,8 @@ echo "<*> Copying docs..."
# copy doc files to root
cp -L $workdir/share/doc/midori/{COPYING,AUTHORS} $workdir
+cat $temp_dir/packages_used.lst | sort | uniq > $workdir/share/doc/midori/README.packages
+rm $temp_dir/packages_used.lst
#drop a/la files, we don't do static builds anyway
find $workdir -iname *.*a -exec rm {} \;
@@ -291,7 +354,7 @@ fi
if [ "$NSIS" != "" ];then
nsis_file=Midori-${version}_setup.exe
echo "Creating $nsis_file"
- makensis -NOCD -V2 ./midori.nsi
+ makensis -NOCD -V4 ./midori.nsi
mv $nsis_file $where_am_i
fi
popd > /dev/null
diff --git a/win32/makedist/midori.nsi b/win32/makedist/midori.nsi
index 0f914f47..66626c61 100644
--- a/win32/makedist/midori.nsi
+++ b/win32/makedist/midori.nsi
@@ -21,7 +21,7 @@ RequestExecutionLevel admin ; set execution level for Windows Vista
; helper defines ;
;;;;;;;;;;;;;;;;;;;
!define PRODUCT_NAME "Midori"
-!define PRODUCT_VERSION "0.5.5"
+!define PRODUCT_VERSION "0.5.7"
!define PRODUCT_BUILD "0"
!define PRODUCT_VERSION_ID "${PRODUCT_VERSION}.${PRODUCT_BUILD}"
!define PRODUCT_PUBLISHER "Christian Dywan"
@@ -136,38 +136,26 @@ Section "!Program Files" SEC01
CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Midori.lnk" "${PRODUCT_EXE}"
!insertmacro MUI_STARTMENU_WRITE_END
-!macro InstallIconThemeRenameSmall OPath IPath
- File "/oname=16x16\${OPath}.png" "${RESOURCEDIR}\share\icons\${ICON_THEME}\16x16\${IPath}.png"
- File "/oname=22x22\${OPath}.png" "${RESOURCEDIR}\share\icons\${ICON_THEME}\22x22\${IPath}.png"
- File "/oname=24x24\${OPath}.png" "${RESOURCEDIR}\share\icons\${ICON_THEME}\24x24\${IPath}.png"
- File /nonfatal "/oname=32x32\${OPath}.png" "${RESOURCEDIR}\share\icons\${ICON_THEME}\32x32\${IPath}.png"
-!macroend
-
-!macro InstallIconThemeRename OPath IPath
- !insertmacro InstallIconThemeRenameSmall ${OPath} ${IPath}
- File /nonfatal "/oname=48x48\${OPath}.png" "${RESOURCEDIR}\share\icons\${ICON_THEME}\48x48\${IPath}.png"
- File /nonfatal "/oname=scalable\${OPath}.svg" "${RESOURCEDIR}\share\icons\${ICON_THEME}\scalable\${IPath}.svg"
-!macroend
-
-!macro InstallIconThemeSmall IconPath
- !insertmacro InstallIconThemeRenameSmall ${IconPath} ${IconPath}
-!macroend
-
-!macro InstallIconTheme IconPath
- !insertmacro InstallIconThemeRename ${IconPath} ${IconPath}
+!macro InstallIconTheme ICat IName
+ File "/oname=${ICat}\16\${IName}.png" "${RESOURCEDIR}\share\icons\${ICON_THEME}\${ICat}\16\${IName}.png"
+ File "/oname=${Icat}\22\${IName}.png" "${RESOURCEDIR}\share\icons\${ICON_THEME}\${ICat}\22\${IName}.png"
+ File "/oname=${Icat}\24\${IName}.png" "${RESOURCEDIR}\share\icons\${ICON_THEME}\${ICat}\24\${IName}.png"
+ File /nonfatal "/oname=${ICat}\32\${IName}.png" "${RESOURCEDIR}\share\icons\${ICON_THEME}\${ICat}\32\${IName}.png"
+ File /nonfatal "/oname=${ICat}\48\${IName}.png" "${RESOURCEDIR}\share\icons\${ICON_THEME}\${ICat}\48\${IName}.png"
+ File /nonfatal "/oname=${ICat}\scalable\${IName}.svg" "${RESOURCEDIR}\share\icons\${ICON_THEME}\${ICat}\scalable\${IName}.svg"
!macroend
!macro CreateIconThemeSectionsSmall SectionPath
- CreateDirectory "$INSTDIR\share\icons\${ICON_THEME}\16x16\${SectionPath}"
- CreateDirectory "$INSTDIR\share\icons\${ICON_THEME}\22x22\${SectionPath}"
- CreateDirectory "$INSTDIR\share\icons\${ICON_THEME}\24x24\${SectionPath}"
- CreateDirectory "$INSTDIR\share\icons\${ICON_THEME}\32x32\${SectionPath}"
+ CreateDirectory "$INSTDIR\share\icons\${ICON_THEME}\${SectionPath}\16"
+ CreateDirectory "$INSTDIR\share\icons\${ICON_THEME}\${SectionPath}\22"
+ CreateDirectory "$INSTDIR\share\icons\${ICON_THEME}\${SectionPath}\24"
+ CreateDirectory "$INSTDIR\share\icons\${ICON_THEME}\${SectionPath}\32"
!macroend
!macro CreateIconThemeSections SectionPath
!insertmacro CreateIconThemeSectionsSmall ${SectionPath}
- CreateDirectory "$INSTDIR\share\icons\${ICON_THEME}\48x48\${SectionPath}"
- CreateDirectory "$INSTDIR\share\icons\${ICON_THEME}\scalable\${SectionPath}"
+ CreateDirectory "$INSTDIR\share\icons\${ICON_THEME}\${SectionPath}\48"
+ CreateDirectory "$INSTDIR\share\icons\${ICON_THEME}\${SectionPath}\scalable"
!macroend
SetOutPath "$INSTDIR\share\icons\${ICON_THEME}"
@@ -181,93 +169,93 @@ Section "!Program Files" SEC01
!insertmacro CreateIconThemeSections "places"
!insertmacro CreateIconThemeSections "status"
- !insertmacro InstallIconTheme "actions\bookmark-new"
- !insertmacro InstallIconTheme "actions\document-open"
- !insertmacro InstallIconTheme "actions\document-open-recent"
- !insertmacro InstallIconTheme "actions\document-print"
- !insertmacro InstallIconTheme "actions\document-properties"
- !insertmacro InstallIconTheme "actions\document-save-as"
- !insertmacro InstallIconTheme "actions\document-save"
- !insertmacro InstallIconTheme "actions\edit-clear"
- !insertmacro InstallIconTheme "actions\edit-copy"
- !insertmacro InstallIconTheme "actions\edit-cut"
- !insertmacro InstallIconTheme "actions\edit-delete"
- !insertmacro InstallIconTheme "actions\edit-find"
- !insertmacro InstallIconTheme "actions\edit-paste"
- !insertmacro InstallIconTheme "actions\edit-redo"
- !insertmacro InstallIconTheme "actions\edit-select-all"
- !insertmacro InstallIconTheme "actions\edit-undo"
- !insertmacro InstallIconTheme "actions\folder-new"
- !insertmacro InstallIconTheme "actions\format-indent-more"
- !insertmacro InstallIconTheme "actions\go-down"
- !insertmacro InstallIconTheme "actions\go-home"
- !insertmacro InstallIconTheme "actions\go-jump"
- !insertmacro InstallIconTheme "actions\go-next"
- !insertmacro InstallIconTheme "actions\go-previous"
- !insertmacro InstallIconTheme "actions\go-up"
- !insertmacro InstallIconTheme "actions\gtk-cancel"
- !insertmacro InstallIconTheme "actions\gtk-edit"
- !insertmacro InstallIconTheme "actions\gtk-no"
- !insertmacro InstallIconTheme "actions\gtk-ok"
- !insertmacro InstallIconTheme "actions\gtk-save"
- !insertmacro InstallIconTheme "actions\gtk-yes"
- !insertmacro InstallIconTheme "actions\help-about"
- !insertmacro InstallIconTheme "actions\help-contents"
- !insertmacro InstallIconTheme "actions\list-add"
- !insertmacro InstallIconTheme "actions\list-remove"
- !insertmacro InstallIconTheme "actions\media-skip-backward"
- !insertmacro InstallIconTheme "actions\media-skip-forward"
- !insertmacro InstallIconTheme "actions\process-stop"
- !insertmacro InstallIconTheme "actions\stop"
- !insertmacro InstallIconTheme "actions\tab-new"
- !insertmacro InstallIconTheme "actions\tools-check-spelling"
- !insertmacro InstallIconTheme "actions\view-fullscreen"
- !insertmacro InstallIconTheme "actions\view-refresh"
- !insertmacro InstallIconTheme "actions\window-close"
- !insertmacro InstallIconTheme "actions\window-new"
- !insertmacro InstallIconTheme "actions\zoom-in"
- !insertmacro InstallIconTheme "actions\zoom-out"
-
- #!insertmacro InstallIconThemeSmall "animations\process-working"
-
- !insertmacro InstallIconTheme "apps\internet-news-reader"
- !insertmacro InstallIconTheme "apps\midori"
- !insertmacro InstallIconTheme "apps\preferences-desktop-theme"
- !insertmacro InstallIconTheme "apps\web-browser"
-
- !insertmacro InstallIconTheme "categories\gtk-preferences"
-
- !insertmacro InstallIconTheme "devices\drive-harddisk"
- !insertmacro InstallIconTheme "devices\media-optical-dvd-rom"
-
- !insertmacro InstallIconTheme "mimetypes\application-x-shockwave-flash"
- !insertmacro InstallIconTheme "mimetypes\extension"
- !insertmacro InstallIconTheme "mimetypes\gtk-file"
- !insertmacro InstallIconTheme "mimetypes\image-x-generic"
- !insertmacro InstallIconTheme "mimetypes\package"
- !insertmacro InstallIconTheme "mimetypes\text-html"
- !insertmacro InstallIconTheme "mimetypes\text-x-generic"
- !insertmacro InstallIconTheme "mimetypes\text-x-javascript"
-
- !insertmacro InstallIconTheme "places\folder-documents"
- !insertmacro InstallIconTheme "places\folder-downloads"
- !insertmacro InstallIconTheme "places\folder-music"
- !insertmacro InstallIconTheme "places\folder-pictures"
- !insertmacro InstallIconTheme "places\folder"
- !insertmacro InstallIconTheme "places\folder-videos"
- !insertmacro InstallIconTheme "places\inode-directory"
- !insertmacro InstallIconTheme "places\user-bookmarks"
- !insertmacro InstallIconTheme "places\user-desktop"
- !insertmacro InstallIconTheme "places\user-home"
- !insertmacro InstallIconTheme "places\user-trash"
-
- !insertmacro InstallIconTheme "status\dialog-password"
- !insertmacro InstallIconTheme "status\gtk-dialog-error"
- !insertmacro InstallIconTheme "status\gtk-dialog-info"
- !insertmacro InstallIconTheme "status\gtk-dialog-warning"
- !insertmacro InstallIconTheme "status\locked"
- !insertmacro InstallIconTheme "status\network-error"
- !insertmacro InstallIconTheme "status\network-idle"
+ !insertmacro InstallIconTheme "actions" "bookmark-new"
+ !insertmacro InstallIconTheme "actions" "document-open"
+ !insertmacro InstallIconTheme "actions" "document-open-recent"
+ !insertmacro InstallIconTheme "actions" "document-print"
+ !insertmacro InstallIconTheme "actions" "document-properties"
+ !insertmacro InstallIconTheme "actions" "document-save-as"
+ !insertmacro InstallIconTheme "actions" "document-save"
+ !insertmacro InstallIconTheme "actions" "edit-clear"
+ !insertmacro InstallIconTheme "actions" "edit-copy"
+ !insertmacro InstallIconTheme "actions" "edit-cut"
+ !insertmacro InstallIconTheme "actions" "edit-delete"
+ !insertmacro InstallIconTheme "actions" "edit-find"
+ !insertmacro InstallIconTheme "actions" "edit-paste"
+ !insertmacro InstallIconTheme "actions" "edit-redo"
+ !insertmacro InstallIconTheme "actions" "edit-select-all"
+ !insertmacro InstallIconTheme "actions" "edit-undo"
+ !insertmacro InstallIconTheme "actions" "folder-new"
+ !insertmacro InstallIconTheme "actions" "format-indent-more"
+ !insertmacro InstallIconTheme "actions" "go-down"
+ !insertmacro InstallIconTheme "actions" "go-home"
+ !insertmacro InstallIconTheme "actions" "go-jump"
+ !insertmacro InstallIconTheme "actions" "go-next"
+ !insertmacro InstallIconTheme "actions" "go-previous"
+ !insertmacro InstallIconTheme "actions" "go-up"
+ !insertmacro InstallIconTheme "actions" "gtk-cancel"
+ !insertmacro InstallIconTheme "actions" "gtk-edit"
+ !insertmacro InstallIconTheme "actions" "gtk-no"
+ !insertmacro InstallIconTheme "actions" "gtk-ok"
+ !insertmacro InstallIconTheme "actions" "gtk-save"
+ !insertmacro InstallIconTheme "actions" "gtk-yes"
+ !insertmacro InstallIconTheme "actions" "help-about"
+ !insertmacro InstallIconTheme "actions" "help-contents"
+ !insertmacro InstallIconTheme "actions" "list-add"
+ !insertmacro InstallIconTheme "actions" "list-remove"
+ !insertmacro InstallIconTheme "actions" "media-skip-backward"
+ !insertmacro InstallIconTheme "actions" "media-skip-forward"
+ !insertmacro InstallIconTheme "actions" "process-stop"
+ !insertmacro InstallIconTheme "actions" "stop"
+ !insertmacro InstallIconTheme "actions" "tab-new"
+ !insertmacro InstallIconTheme "actions" "tools-check-spelling"
+ !insertmacro InstallIconTheme "actions" "view-fullscreen"
+ !insertmacro InstallIconTheme "actions" "view-refresh"
+ !insertmacro InstallIconTheme "actions" "window-close"
+ !insertmacro InstallIconTheme "actions" "window-new"
+ !insertmacro InstallIconTheme "actions" "zoom-in"
+ !insertmacro InstallIconTheme "actions" "zoom-out"
+
+ #!insertmacro InstallIconThemeSmall "animations" "process-working"
+
+ !insertmacro InstallIconTheme "apps" "internet-news-reader"
+ !insertmacro InstallIconTheme "apps" "midori"
+ !insertmacro InstallIconTheme "apps" "preferences-desktop-theme"
+ !insertmacro InstallIconTheme "apps" "web-browser"
+
+ !insertmacro InstallIconTheme "categories" "gtk-preferences"
+
+ !insertmacro InstallIconTheme "devices" "drive-harddisk"
+ !insertmacro InstallIconTheme "devices" "media-optical-dvd-rom"
+
+ !insertmacro InstallIconTheme "mimetypes" "application-x-shockwave-flash"
+ !insertmacro InstallIconTheme "mimetypes" "extension"
+ !insertmacro InstallIconTheme "mimetypes" "gtk-file"
+ !insertmacro InstallIconTheme "mimetypes" "image-x-generic"
+ !insertmacro InstallIconTheme "mimetypes" "package"
+ !insertmacro InstallIconTheme "mimetypes" "text-html"
+ !insertmacro InstallIconTheme "mimetypes" "text-x-generic"
+ !insertmacro InstallIconTheme "mimetypes" "text-x-javascript"
+
+ !insertmacro InstallIconTheme "places" "folder-documents"
+ !insertmacro InstallIconTheme "places" "folder-downloads"
+ !insertmacro InstallIconTheme "places" "folder-music"
+ !insertmacro InstallIconTheme "places" "folder-pictures"
+ !insertmacro InstallIconTheme "places" "folder"
+ !insertmacro InstallIconTheme "places" "folder-videos"
+ !insertmacro InstallIconTheme "places" "inode-directory"
+ !insertmacro InstallIconTheme "places" "user-bookmarks"
+ !insertmacro InstallIconTheme "places" "user-desktop"
+ !insertmacro InstallIconTheme "places" "user-home"
+ !insertmacro InstallIconTheme "places" "user-trash"
+
+ !insertmacro InstallIconTheme "status" "dialog-password"
+ !insertmacro InstallIconTheme "status" "gtk-dialog-error"
+ !insertmacro InstallIconTheme "status" "gtk-dialog-info"
+ !insertmacro InstallIconTheme "status" "gtk-dialog-warning"
+ !insertmacro InstallIconTheme "status" "locked"
+ !insertmacro InstallIconTheme "status" "network-error"
+ !insertmacro InstallIconTheme "status" "network-idle"
SectionEnd
@@ -287,6 +275,8 @@ SectionEnd
Section "Desktop Shortcuts" SEC03
SectionIn 1
+ # CreateShortCut implicitly sets content of OUTDIR as working directory for shortcut, set it to bin
+ SetOutPath "$INSTDIR\bin"
CreateShortCut "$DESKTOP\Midori.lnk" "${PRODUCT_EXE}"
CreateShortCut "$QUICKLAUNCH\Midori.lnk" "${PRODUCT_EXE}"
SectionEnd
diff --git a/win32/makedist/win32-release b/win32/makedist/win32-release
index b25c3307..497930d4 100755
--- a/win32/makedist/win32-release
+++ b/win32/makedist/win32-release
@@ -10,44 +10,54 @@
# See the file COPYING for the full license text.
-version=$(grep --color=no 'VERSION = VERSION_FULL = ' wscript | sed -r "s@.+ = '(.+)'@\1@")
dropbox_dir=$HOME/Dropbox/Public
+SRCDIR=$PWD
# 32-bit build
#mingw32-env
export MINGW_PREFIX="/usr/i686-w64-mingw32/sys-root/mingw"
eval `rpm --eval %{mingw32_env}`
-PKG_CONFIG_PATH="$MINGW_PREFIX/lib/pkgconfig/" ./configure --prefix=$MINGW_PREFIX --enable-gtk3
-make clean
+rm -fr _mingw32
+mkdir _mingw32 && cd _mingw32
+mingw32-cmake -DUSE_ZEITGEIST=0 -DUSE_GTK3=1 -DCMAKE_INSTALL_PREFIX=$MINGW_PREFIX -DCMAKE_VERBOSE_MAKEFILE=0 $SRCDIR
+make
sudo make install || exit
-rpmquery -qa mingw32* > midori-${version}-deps-i686.txt
-rm -f midori-$version.sha1
-MINGW_PREFIX=${MINGW_PREFIX} RELEASE=1 NSIS=1 ./win32/makedist/makedist.midori
+version=$(grep set\(VERSION $SRCDIR/CMakeLists.txt|head -n1|sed -e 's/^.*set(VERSION \([0-9.]*\)).*$/\1/')
+
+rpmquery -qa mingw32* > $SRCDIR/midori-${version}-deps-i686.txt
+rm -f $SRCDIR/midori-$version.sha1
+
+MINGW_PREFIX=${MINGW_PREFIX} RELEASE=1 NSIS=1 $SRCDIR/win32/makedist/makedist.midori
mv -v midori-${version}.7z $dropbox_dir
mv -v Midori-${version}_setup.exe $dropbox_dir
-dropbox puburl $dropbox_dir/midori-${version}.7z > release_links.txt
-dropbox puburl $dropbox_dir/Midori-${version}_setup.exe >> release_links.txt
+dropbox puburl $dropbox_dir/midori-${version}.7z > $SRCDIR/release_links.txt
+dropbox puburl $dropbox_dir/Midori-${version}_setup.exe >> $SRCDIR/release_links.txt
if [ "$DO_64BIT" != "" ]; then
+ cd $SRCDIR
# 64-bit build
#mingw64-env
export MINGW_PREFIX="/usr/x86_64-w64-mingw32/sys-root/mingw"
eval `rpm --eval %{mingw64_env}`
- PKG_CONFIG_PATH="$MINGW_PREFIX/lib/pkgconfig/" ./configure --prefix=$MINGW_PREFIX --enable-gtk3
- make clean
+ rm -fr _mingw64
+ mkdir _mingw64 && cd _mingw64
+ mingw64-cmake -DUSE_ZEITGEIST=0 -DUSE_GTK3=1 -DCMAKE_INSTALL_PREFIX=$MINGW_PREFIX -DCMAKE_VERBOSE_MAKEFILE=0 $SRCDIR
+ make
sudo make install || exit
- rpmquery -qa mingw64* > midori-${version}-deps-x86_64.txt
- MINGW_PREFIX=${MINGW_PREFIX} RELEASE=1 sh ./win32/makedist/makedist.midori x86_64-portable
+ rpmquery -qa mingw64* > $SRCDIR/midori-${version}-deps-x86_64.txt
+ MINGW_PREFIX=${MINGW_PREFIX} RELEASE=1 sh $SRCDIR/win32/makedist/makedist.midori x86_64-portable
mv -v midori-${version}-x86_64-portable.7z $dropbox_dir
- dropbox puburl $dropbox_dir/midori-${version}-x86_64-portable.7z >> release_links.txt
+ dropbox puburl $dropbox_dir/midori-${version}-x86_64-portable.7z >> $SRCDIR/release_links.txt
fi
+cd $SRCDIR
+
echo
echo "============================="
echo "Midori win32 release details:"
diff --git a/win32/README_OPENSUSE_MINGW.txt b/win32/old/README_OPENSUSE_MINGW.txt
index ed8a59ad..ed8a59ad 100644
--- a/win32/README_OPENSUSE_MINGW.txt
+++ b/win32/old/README_OPENSUSE_MINGW.txt
diff --git a/win32/x86-mingw32-opensuse/crossconfig.sh b/win32/old/x86-mingw32-opensuse/crossconfig.sh
index 169c0940..169c0940 100755
--- a/win32/x86-mingw32-opensuse/crossconfig.sh
+++ b/win32/old/x86-mingw32-opensuse/crossconfig.sh
diff --git a/win32/x86-mingw32-opensuse/install.sh b/win32/old/x86-mingw32-opensuse/install.sh
index e9993311..e9993311 100755
--- a/win32/x86-mingw32-opensuse/install.sh
+++ b/win32/old/x86-mingw32-opensuse/install.sh
diff --git a/win32/x86-mingw32-opensuse/packages.list b/win32/old/x86-mingw32-opensuse/packages.list
index 31c57f36..31c57f36 100644
--- a/win32/x86-mingw32-opensuse/packages.list
+++ b/win32/old/x86-mingw32-opensuse/packages.list
diff --git a/wscript b/wscript
deleted file mode 100644
index 2b97afce..00000000
--- a/wscript
+++ /dev/null
@@ -1,674 +0,0 @@
-#! /usr/bin/env python
-# WAF build script for midori
-# This file is licensed under the terms of the expat license, see the file EXPAT.
-
-import sys
-
-# Waf version check, for global waf installs
-try:
- from Constants import WAFVERSION
-except:
- WAFVERSION='1.0.0'
-if WAFVERSION[:3] != '1.5':
- print ('Incompatible Waf, use 1.5')
- sys.exit (1)
-
-import Build
-import Options
-import Utils
-import pproc as subprocess
-import os
-try:
- import UnitTest
-except:
- import unittestw as UnitTest
-import Task
-from TaskGen import extension, feature, taskgen
-import misc
-from Configure import find_program_impl
-
-APPNAME = 'midori'
-VERSION = VERSION_FULL = '0.5.5'
-VERSION_SUFFIX = ' (%s)' % VERSION
-
-try:
- if os.path.isdir ('.git'):
- git = Utils.cmd_output (['git', 'describe'], silent=True)
- if git:
- VERSION_FULL = git.strip ()
- elif os.path.isdir ('.bzr'):
- bzr = Utils.cmd_output (['bzr', 'revno'], silent=True)
- if bzr:
- VERSION_FULL = '%s~r%s' % (VERSION, bzr.strip ())
- else:
- folder = os.getcwd ()
- if VERSION in folder:
- VERSION_FULL = os.path.basename (folder)
- if VERSION in VERSION_FULL:
- VERSION_SUFFIX = VERSION_FULL.replace (VERSION, '')
-except:
- pass
-
-srcdir = '.'
-blddir = '_build' # recognized by ack
-
-def option_enabled (option):
- if getattr (Options.options, 'enable_' + option):
- return True
- if getattr (Options.options, 'disable_' + option):
- return False
- return True
-
-def is_mingw (env):
- if 'CC' in env:
- cc = env['CC']
- if not isinstance (cc, str):
- cc = ''.join (cc)
- return cc.find ('mingw') != -1# or cc.find ('wine') != -1
- return False
-
-def is_win32 (env):
- return is_mingw (env) or Options.platform == 'win32'
-
-# Compile Win32 res files to (resource) object files
-def rc_file(self, node):
- rctask = self.create_task ('winrc')
- rctask.set_inputs (node)
- rctask.set_outputs (node.change_ext ('.rc.o'))
- self.compiled_tasks.append (rctask)
-rc_file = extension ('.rc')(rc_file)
-Task.simple_task_type ('winrc', '${WINRC} -o${TGT} ${SRC}', color='BLUE',
- before='cc cxx', shell=False)
-
-def configure (conf):
- def option_checkfatal (option, desc):
- if hasattr (Options.options, 'enable_' + option):
- if getattr (Options.options, 'enable_' + option):
- Utils.pprint ('RED', desc + ' N/A')
- sys.exit (1)
-
- def dirname_default (dirname, default, defname=None):
- if getattr (Options.options, dirname) == '':
- dirvalue = default
- else:
- dirvalue = getattr (Options.options, dirname)
- if not defname:
- defname = dirname
- conf.define (defname, dirvalue)
- return dirvalue
-
- def check_version (given_version, major, minor, micro):
- if '.' in given_version:
- given_major, given_minor, given_micro = given_version.split ('.', 2)
- if '.' in given_micro:
- given_micro, given_pico = given_micro.split ('.', 1)
- else:
- given_major, given_minor, given_micro = given_version
- return int(given_major) > major or \
- int(given_major) == major and int(given_minor) > minor or \
- int(given_major) == major and int(given_minor) == minor and int(given_micro) >= micro
-
- conf.check_message_custom ('release version', '', VERSION_FULL)
-
- conf.check_tool ('compiler_cc')
- conf.check_tool ('vala')
- conf.check_tool ('glib2')
- if not check_version (conf.env['VALAC_VERSION'], 0, 16, 0):
- Utils.pprint ('RED', 'Vala 0.16.0 or later is required.')
- sys.exit (1)
-
- if option_enabled ('nls'):
- conf.check_tool ('intltool')
- if not conf.env['INTLTOOL'] and conf.env['POCOM']:
- option_checkfatal ('nls', 'localization')
- conf.define ('ENABLE_NLS', 0)
- else:
- conf.define ('ENABLE_NLS', 1)
- else:
- conf.define ('ENABLE_NLS', 0)
- conf.check_message_custom ('nls', '', 'disabled')
-
- conf.find_program ('rsvg-convert', var='RSVG_CONVERT')
-
- if is_win32 (conf.env):
- conf.find_program ('windres', var='WINRC')
- conf.env['platform'] = 'win32'
-
- # This is specific to cross compiling with mingw
- if is_mingw (conf.env) and Options.platform != 'win32':
- if not 'AR' in os.environ and not 'RANLIB' in os.environ:
- conf.env['AR'] = os.environ['CC'][:-3] + 'ar'
- if conf.find_program (os.environ['CC'][:-3] + 'windres', var='WINRC'):
- os.environ['WINRC'] = os.environ['CC'][:-3] + 'windres'
- Options.platform = 'win32'
- # Make sure we don't have -fPIC in the CCFLAGS
- conf.env["shlib_CCFLAGS"] = []
- # Adjust file naming
- conf.env["shlib_PATTERN"] = 'lib%s.dll'
- conf.env['program_PATTERN'] = '%s.exe'
- # Use Visual C++ compatible alignment
- conf.env.append_value ('CCFLAGS', '-mms-bitfields')
- conf.env['staticlib_LINKFLAGS'] = []
-
- Utils.pprint ('BLUE', 'Mingw recognized, assuming cross compile.')
-
- dirname_default ('LIBDIR', os.path.join (conf.env['PREFIX'], 'lib'))
- if conf.env['PREFIX'] == '/usr':
- dirname_default ('SYSCONFDIR', '/etc')
- else:
- dirname_default ('SYSCONFDIR', os.path.join (conf.env['PREFIX'], 'etc'))
- dirname_default ('DATADIR', os.path.join (conf.env['PREFIX'], 'share'),
- # Use MDATADIR because DATADIR is a constant in objidl.h on Windows
- 'MDATADIR')
- conf.undefine ('DATADIR')
- dirname_default ('DOCDIR', os.path.join (conf.env['MDATADIR'], 'doc'))
- if not APPNAME in conf.env['DOCDIR']:
- conf.env['DOCDIR'] += '/' + APPNAME
- conf.define ('DOCDIR', conf.env['DOCDIR'])
-
- if option_enabled ('apidocs'):
- conf.find_program ('gtkdoc-scan', var='GTKDOC_SCAN')
- conf.find_program ('gtkdoc-mktmpl', var='GTKDOC_MKTMPL')
- conf.find_program ('gtkdoc-mkdb', var='GTKDOC_MKDB')
- conf.find_program ('gtkdoc-mkhtml', var='GTKDOC_MKHTML')
- if conf.env['GTKDOC_SCAN'] and conf.env['GTKDOC_MKTMPL'] \
- and conf.env['GTKDOC_MKDB'] and conf.env['GTKDOC_MKHTML']:
- pass
- else:
- option_checkfatal ('apidocs', 'API documentation')
- else:
- conf.check_message_custom ('gtk-doc', '', 'disabled')
-
- def check_pkg (name, version='', mandatory=True, var=None, args=''):
- if not var:
- var = name.split ('-')[0].upper ()
- ver_str = ['',' >= ' + version][version != '']
- def okmsg_ver (kw):
- return conf.check_cfg (modversion=name, uselibstore=var)
- conf.check_cfg (msg='Checking for ' + name + ver_str, okmsg=okmsg_ver,
- package=name, uselib_store=var, args='--cflags --libs ' + args,
- atleast_version=version, mandatory=mandatory)
- have = conf.env['HAVE_' + var] == 1
- conf.define (var + '_VERSION', ['No', conf.check_cfg (modversion=name,
- uselib_store=var, errmsg=name + ver_str + ' not found')][have])
- return have
-
- if is_win32 (os.environ):
- conf.define ('LIBNOTIFY_VERSION', 'No')
- conf.check_message_custom ('libnotify', '', 'disabled')
- else:
- check_pkg ('libnotify', mandatory=True)
- conf.define ('HAVE_LIBNOTIFY', [0,1][conf.env['LIBNOTIFY_VERSION'] != 'No'])
-
- if option_enabled ('granite'):
- check_pkg ('granite', '0.2', mandatory=False)
- granite = ['N/A', 'yes'][conf.env['HAVE_GRANITE'] == 1]
- if granite != 'yes':
- option_checkfatal ('granite', 'new notebook, pop-overs')
- conf.define ('GRANITE_VERSION', 'No')
- else:
- conf.env.append_value ('VALAFLAGS', '-D HAVE_GRANITE')
- else:
- conf.define ('GRANITE_VERSION', 'No')
- conf.check_message_custom ('granite', '', 'disabled')
-
- if option_enabled ('zeitgeist'):
- check_pkg ('zeitgeist-1.0', '0.3.14')
- else:
- conf.check_message_custom ('zeitgeist', '', 'disabled')
-
- conf.check (lib='m')
- check_pkg ('gmodule-2.0')
- check_pkg ('gio-2.0', '2.32.3')
-
- args = ''
- if Options.platform == 'win32':
- args = '--define-variable=target=win32'
- conf.env.append_value ('VALAFLAGS', '-D HAVE_WIN32')
- elif sys.platform != 'darwin':
- if sys.platform.startswith ('freebsd'):
- conf.env.append_value ('VALAFLAGS', '-D HAVE_FREEBSD')
- else:
- conf.env.append_value ('VALAFLAGS', '-D HAVE_EXECINFO_H')
-
- check_pkg ('x11')
- # Pass /usr/X11R6/include for OpenBSD
- conf.check (header_name='X11/extensions/scrnsaver.h',
- includes='/usr/X11R6/include', mandatory=False)
- conf.check (lib='Xss', libpath='/usr/X11R6/lib', mandatory=False)
-
- have_gtk3 = option_enabled ('gtk3') or option_enabled ('webkit2') or option_enabled ('granite')
- if have_gtk3:
- check_pkg ('gtk+-3.0', '3.0.0', var='GTK', mandatory=False)
- check_pkg ('gcr-3', '2.32', mandatory=False)
- if option_enabled ('webkit2'):
- # 2.0.0 matches 1.11.91 API; 1.11.92 > 2.0.0
- check_pkg ('webkit2gtk-3.0', '1.11.91', var='WEBKIT', mandatory=False)
- if not conf.env['HAVE_WEBKIT']:
- Utils.pprint ('RED', 'WebKit2/ GTK+3 was not found.\n' \
- 'Pass --disable-webkit2 to build without WebKit2.')
- sys.exit (1)
- conf.define ('HAVE_WEBKIT2', 1)
- conf.env.append_value ('VALAFLAGS', '-D HAVE_WEBKIT2')
- else:
- check_pkg ('webkitgtk-3.0', '1.8.3', var='WEBKIT', mandatory=False)
- if not conf.env['HAVE_GTK'] or not conf.env['HAVE_WEBKIT']:
- Utils.pprint ('RED', 'GTK+3 was not found.\n' \
- 'Pass --disable-gtk3 to build without GTK+3.')
- sys.exit (1)
- check_pkg ('javascriptcoregtk-3.0', '1.8.3', args=args)
- conf.env.append_value ('VALAFLAGS', '-D HAVE_GTK3')
- conf.env.append_value ('VALAFLAGS', '-D HAVE_OFFSCREEN')
- conf.env.append_value ('VALAFLAGS', '-D HAVE_DOM')
- else:
- check_pkg ('gtk+-2.0', '2.24.0', var='GTK')
- check_pkg ('webkit-1.0', '1.8.3', args=args)
- conf.define ('GCR_VERSION', 'No')
- check_pkg ('javascriptcoregtk-1.0', '1.8.3', args=args)
- if check_version (conf.env['GTK_VERSION'], 2, 20, 0):
- conf.env.append_value ('VALAFLAGS', '-D HAVE_OFFSCREEN')
- conf.env['HAVE_GTK3'] = have_gtk3
- conf.env['HAVE_WEBKIT2'] = option_enabled ('webkit2')
-
- check_pkg ('libsoup-gnome-2.4', '2.27.90', var='LIBSOUP')
- if check_version (conf.env['LIBSOUP_VERSION'], 2, 29, 91):
- conf.define ('HAVE_LIBSOUP_2_29_91', 1)
- if check_version (conf.env['LIBSOUP_VERSION'], 2, 34, 0):
- conf.define ('HAVE_LIBSOUP_2_34_0', 1)
- conf.env.append_value ('VALAFLAGS', '-D HAVE_LIBSOUP_2_34_0')
- if check_version (conf.env['LIBSOUP_VERSION'], 2, 37, 1):
- conf.define ('HAVE_LIBSOUP_2_37_1', 1)
-
- check_pkg ('libxml-2.0', '2.6')
- conf.undefine ('LIBXML_VERSION') # Defined in xmlversion.h
- check_pkg ('sqlite3', '3.6.19', var='SQLITE')
-
- # Store options in env, since 'Options' is not persistent
- if 'CC' in os.environ: conf.env['CC'] = os.environ['CC'].split()
- conf.env['addons'] = option_enabled ('addons')
- conf.env['tests'] = option_enabled ('tests')
- conf.env['docs'] = option_enabled ('docs')
- if 'LINGUAS' in os.environ: conf.env['LINGUAS'] = os.environ['LINGUAS']
-
- conf.check (header_name='unistd.h')
- conf.define ('HAVE_OSX', int(sys.platform == 'darwin'))
- if Options.platform == 'win32':
- conf.check (lib='ole32')
- conf.check (lib='uuid')
- conf.env.append_value ('LINKFLAGS', '-mwindows')
- conf.env.append_value ('program_LINKFLAGS', ['-Wl,--out-implib=default/midori/libmidori.a', '-Wl,--export-all-symbols'])
- else:
- conf.check (header_name='signal.h')
-
- conf.define ('PACKAGE_NAME', APPNAME)
- conf.define ('PACKAGE_BUGREPORT', 'https://bugs.launchpad.net/midori')
- conf.define ('GETTEXT_PACKAGE', APPNAME)
-
- conf.define ('MIDORI_VERSION', VERSION)
- major, minor, micro = VERSION.split ('.', 2)
- conf.define ('MIDORI_MAJOR_VERSION', int (major))
- conf.define ('MIDORI_MINOR_VERSION', int (minor))
- conf.define ('MIDORI_MICRO_VERSION', int (micro))
-
- conf.env.append_value ('CCFLAGS', '-DHAVE_CONFIG_H -include config.h'.split ())
- debug_level = Options.options.debug_level
- compiler = conf.env['CC_NAME']
-
- if debug_level == 'full':
- conf.define ('PACKAGE_VERSION', '%s (debug)' % VERSION_FULL)
- conf.env.append_value ('CCFLAGS', '-DMIDORI_VERSION_SUFFIX="%s (debug)"' % VERSION_SUFFIX)
- else:
- conf.define ('PACKAGE_VERSION', VERSION_FULL)
- conf.env.append_value ('CCFLAGS', '-DMIDORI_VERSION_SUFFIX="%s"' % VERSION_SUFFIX)
- conf.write_config_header ('config.h')
-
- if debug_level == 'debug':
- conf.env.append_value ('VALAFLAGS', '--debug --enable-deprecated'.split ())
- if compiler == 'gcc':
- conf.env.append_value ('CCFLAGS', '-O2 -g -Wall -Wno-deprecated-declarations'.split ())
- elif debug_level == 'full':
- conf.env.append_value ('VALAFLAGS', '--debug --enable-checking'.split ())
- if compiler == 'gcc':
- conf.env.append_value ('CCFLAGS',
- '-O2 -g -Wall -Wextra -DG_ENABLE_DEBUG '
- '-Waggregate-return -Wno-unused-parameter '
- '-Wno-missing-field-initializers '
- '-Wredundant-decls -Wmissing-noreturn '
- '-Wshadow -Wpointer-arith -Wcast-align '
- '-Winline -Wformat-security -fno-common '
- '-Winit-self -Wundef -Wdeclaration-after-statement '
- '-Wmissing-format-attribute -Wnested-externs'.split ())
- conf.env.append_value ('CCFLAGS', '-Wno-unused-variable -Wno-comment'.split ())
-
-def set_options (opt):
- def add_enable_option (option, desc, group=None, disable=False):
- if group == None:
- group = opt
- option_ = option.replace ('-', '_')
- group.add_option ('--enable-' + option, action='store_true', default=False,
- help='Enable ' + desc + ' [Default: ' + str (not disable) + ']',
- dest='enable_' + option_)
- group.add_option ('--disable-' + option, action='store_true',
- default=disable, help='Disable ' + desc, dest='disable_' + option_)
-
- opt.tool_options ('compiler_cc')
- opt.get_option_group ('--check-c-compiler').add_option('-d', '--debug-level',
- action = 'store', default = 'debug',
- help = 'Specify the debugging level. [\'none\', \'debug\', \'full\']',
- choices = ['none', 'debug', 'full'], dest = 'debug_level')
- opt.tool_options ('gnu_dirs')
- opt.parser.remove_option ('--oldincludedir')
- opt.parser.remove_option ('--htmldir')
- opt.parser.remove_option ('--dvidir')
- opt.parser.remove_option ('--pdfdir')
- opt.parser.remove_option ('--psdir')
- opt.tool_options ('intltool')
- opt.add_option ('--run', action='store_true', default=False,
- help='Run application after building it', dest='run')
-
- group = opt.add_option_group ('Localization and documentation', '')
- add_enable_option ('nls', 'native language support', group)
- group.add_option ('--update-pot', action='store_true', default=False,
- help='Update gettext template', dest='update_pot')
- group.add_option ('--update-po', action='store_true', default=False,
- help='Update all localization files', dest='update_po')
- add_enable_option ('docs', 'informational text files', group)
- add_enable_option ('apidocs', 'API documentation', group, disable=True)
-
- group = opt.add_option_group ('Optional features', '')
- add_enable_option ('unique', 'single instance support', group, disable=is_win32 (os.environ))
- add_enable_option ('granite', 'new notebook, pop-overs', group, disable=True)
- add_enable_option ('addons', 'building of extensions', group)
- add_enable_option ('tests', 'install tests', group, disable=True)
- add_enable_option ('gtk3', 'GTK+3 and WebKitGTK+3 support', group, disable=True)
- add_enable_option ('webkit2', 'WebKit2 support', group, disable=True)
- add_enable_option ('zeitgeist', 'Zeitgeist history integration', group, disable=is_win32 (os.environ))
-
- # Provided for compatibility
- opt.add_option ('--build', help='Ignored')
- opt.add_option ('--disable-maintainer-mode', help='Ignored')
-
-# Taken from Geany's wscript, modified to support LINGUAS variable
-def write_linguas_file (self):
- linguas = ''
- # Depending on Waf version, getcwd() is different
- if os.path.exists ('./po'):
- podir = './po'
- else:
- podir = '../po'
- if 'LINGUAS' in Build.bld.env:
- files = Build.bld.env['LINGUAS']
- for f in files.split (' '):
- if os.path.exists (podir + '/' + f + '.po'):
- linguas += f + ' '
- else:
- files = os.listdir (podir)
- for f in files:
- if f.endswith ('.po'):
- linguas += '%s ' % f[:-3]
- f = open (podir + '/LINGUAS', 'w')
- f.write ('# This file is autogenerated. Do not edit.\n%s\n' % linguas)
- f.close ()
-write_linguas_file = feature ('intltool_po')(write_linguas_file)
-
-def build (bld):
- if Options.options.update_pot:
- os.chdir ('./po')
- try:
- subprocess.call(['intltool-update', '-p', '-g', APPNAME])
- Utils.pprint ('YELLOW', "Updated gettext template.")
- except:
- Utils.pprint ('RED', "Failed to update gettext template.")
- Utils.pprint ('RED', "Make sure intltool is installed.")
- os.chdir ('..')
- return
-
- if Options.options.update_po:
- os.chdir('./po')
- try:
- subprocess.call(['intltool-update', '-r', '-g', APPNAME])
- Utils.pprint ('YELLOW', "Updated translations.")
- except:
- Utils.pprint ('RED', "Failed to update translations.")
- Utils.pprint ('RED', "Make sure intltool is installed.")
- os.chdir ('..')
- return
-
- bld.add_group ()
-
- bld.add_subdirs ('midori icons')
- bld.add_subdirs ('extensions')
-
- bld.add_group ()
-
- if bld.env['docs']:
- bld.install_files ('${DOCDIR}/', \
- 'AUTHORS COPYING ChangeLog EXPAT README data/faq.html data/faq.css')
-
- if bld.env['INTLTOOL']:
- obj = bld.new_task_gen ('intltool_po')
- obj.podir = 'po'
- obj.appname = APPNAME
-
- if bld.env['GTKDOC_SCAN'] and Options.commands['build']:
- bld.add_subdirs ('docs/api')
- bld.install_files ('${DOCDIR}/api/', blddir + '/docs/api/*')
-
- for res_file in os.listdir ('data'):
- if is_win32 (bld.env):
- break
- if not '.desktop' in res_file:
- continue
- desktop = res_file[:-3]
- appdir = '${MDATADIR}/applications'
- if bld.env['INTLTOOL']:
- obj = bld.new_task_gen ('intltool_in')
- obj.source = 'data/' + desktop + '.in'
- obj.install_path = appdir
- obj.flags = ['-d', '-c']
- bld.install_files (appdir, 'data/' + desktop)
- else:
- folder = os.path.abspath (blddir + '/default/data')
- Utils.check_dir (folder)
- pre = open ('data/' + desktop + '.in')
- after = open (folder + '/' + desktop, 'w')
- try:
- try:
- for line in pre:
- if line != '':
- if line[0] == '_':
- after.write (line[1:])
- else:
- after.write (line)
- after.close ()
- Utils.pprint ('BLUE', desktop + '.in -> ' + desktop)
- bld.install_files (appdir, folder + '/' + desktop)
- except:
- Utils.pprint ('BLUE', 'File ' + desktop + ' not generated')
- finally:
- pre.close ()
-
- if bld.env['RSVG_CONVERT']:
- Utils.check_dir (blddir + '/data')
- command = bld.env['RSVG_CONVERT'] + \
- ' -o ' + blddir + '/data/logo-shade.png ' + \
- srcdir + '/data/logo-shade.svg'
- if not Utils.exec_command (command):
- bld.install_files ('${MDATADIR}/' + APPNAME + '/res', blddir + '/data/logo-shade.png')
- else:
- Utils.pprint ('BLUE', "logo-shade could not be rasterized.")
-
- for res_file in os.listdir ('data'):
- if '.desktop' in res_file or 'faq.' in res_file or 'midori.' in res_file:
- continue
- dest = '${MDATADIR}/' + APPNAME + '/res'
- if (os.path.isdir ('data/' + res_file)):
- dest += '/' + res_file
- res_file += '/*'
- bld.install_files (dest, 'data/' + res_file)
-
- for config_file in os.listdir ('config'):
- dest = '${SYSCONFDIR}/xdg/' + APPNAME
- if (os.path.isdir ('config/' + config_file)):
- dest += '/' + config_file
- for child in os.listdir ('config/' + config_file):
- if (os.path.isdir ('config/' + config_file + '/' + child)):
- dest += '/' + child
- child += '/*'
- bld.install_files (dest, 'config/' + config_file + '/' + child)
- continue
- bld.install_files (dest, 'config/' + config_file)
-
- if Options.commands['check'] or bld.env['tests']:
- bld.add_subdirs ('tests')
-
- if Options.commands['clean']:
- distclean ()
-
-def check (ctx):
- # The real work happens in shutdown ()
- pass
-
-def distclean ():
- if os.path.exists ('po/LINGUAS'):
- os.remove ('po/LINGUAS')
-
-def shutdown ():
- if Options.commands['install'] or Options.commands['uninstall']:
- dir = Build.bld.get_install_path ('${MDATADIR}/icons/hicolor')
- icon_cache_updated = False
- if not Options.options.destdir:
- # update the pixmap cache directory
- try:
- command = 'gtk-update-icon-cache -q -f -t %s' % dir
- if not Utils.exec_command (command):
- Utils.pprint ('YELLOW', "Updated Gtk icon cache.")
- icon_cache_updated = True
- except:
- Utils.pprint ('RED', "Failed to update icon cache.")
- if not icon_cache_updated:
- Utils.pprint ('YELLOW', "Icon cache not updated. "
- "After install, run this:")
- Utils.pprint ('YELLOW', "gtk-update-icon-cache -q -f -t %s" % dir)
-
- elif Options.commands['check']:
- def reset_xdg_dirs ():
- import tempfile, shutil
- base = os.path.join (tempfile.gettempdir (), 'midori-test', '%s')
- if os.path.exists (base % ''):
- shutil.rmtree (base % '')
- for x in ['XDG_CONFIG_HOME', 'XDG_CACHE_HOME', 'XDG_DATA_HOME', 'XDG_RUNTIME_DIR', 'TMPDIR']:
- os.environ[x] = (base % x).lower ()
- Utils.check_dir (os.environ[x])
-
- def subprocess_popen_timeout (args, stdout=None, stderr=None):
- import threading, signal
- def t_kill ():
- Utils.pprint ('RED', 'timed out')
- os.kill (pp.pid, signal.SIGABRT)
- t = threading.Timer (int(os.environ.get ('MIDORI_TIMEOUT', '42')), t_kill)
- t.start ()
- if is_mingw (Build.bld.env):
- args.insert (0, 'wine')
- cwd = Build.bld.env['PREFIX'] + os.sep + 'bin'
- pp = subprocess.Popen (args, cwd=cwd, stdout=stdout, stderr=stderr)
- if stdout is None:
- (out, err) = pp.communicate ()
- t.cancel ()
- return pp
-
- # Avoid i18n-related false failures
- os.environ['LC_ALL'] = 'C'
- if is_mingw (Build.bld.env):
- os.environ['MIDORI_EXEC_PATH'] = Build.bld.env['PREFIX']
- test = UnitTest.unit_test ()
-
- reset_xdg_dirs ()
- if True:
- test.unit_test_results = {}
- for obj in Build.bld.all_task_gen:
- if getattr (obj, 'unit_test', '') and 'cprogram' in obj.features:
- if 'MIDORI_UNITS' in os.environ and not obj.target.split('-')[1] in os.environ['MIDORI_UNITS']:
- continue
- output = obj.path
- filename = os.path.join (output.abspath (obj.env), obj.target)
- srcdir = output.abspath ()
- label = os.path.join (output.bldpath (obj.env), obj.target)
- test.unit_tests[label] = (filename, srcdir)
-
- Utils.pprint ('GREEN', 'Running the unit tests')
- for label in test.unit_tests.allkeys:
- filename = test.unit_tests[label][0]
- test.unit_test_results[label] = 0
- try:
- if is_mingw (Build.bld.env):
- filename += '.exe'
- args = [filename]
- pp = subprocess_popen_timeout (args)
- test.unit_test_results[label] = int (pp.returncode == 0)
- if not test.unit_test_results[label]:
- test.num_tests_failed += 1
- except OSError:
- msg = sys.exc_info()[1] # Python 2/3 compatibility
- Utils.pprint ('RED', '%s: %s' % (args, msg))
- test.num_tests_err += 1
- except KeyboardInterrupt:
- pass
- else:
- test.want_to_see_test_output = True
- test.want_to_see_test_error = True
- test.run ()
-
- reset_xdg_dirs ()
- for label in test.unit_tests.allkeys:
- if not test.unit_test_results[label]:
- Utils.pprint ('YELLOW', label + '...FAILED')
- filename = test.unit_tests[label][0]
- try:
- if is_mingw (Build.bld.env):
- filename += '.exe'
- args = ['gdb', '--batch', '-ex', 'set print thread-events off', '-ex', 'run', '-ex', 'bt', filename]
- pp = subprocess_popen_timeout (args)
- except OSError:
- Utils.pprint ('RED', 'Install gdb to see backtraces')
- except KeyboardInterrupt:
- pass
- else:
- Utils.pprint ('GREEN', label + '.......OK')
- filename = test.unit_tests[label][0]
- if is_mingw (Build.bld.env):
- filename += '.exe'
- if os.environ.get ('MIDORI_TEST') == 'valgrind':
- args = ['valgrind', '-q', '--leak-check=no', '--num-callers=4', '--show-possibly-lost=no', '--undef-value-errors=yes', '--track-origins=yes', filename]
- elif os.environ.get ('MIDORI_TEST') == 'callgrind':
- args = ['valgrind', '--tool=callgrind', '--callgrind-out-file=%s.callgrind' % filename, filename]
- else:
- continue
- try:
- pp = subprocess_popen_timeout (args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- skip = False
- for line in iter(pp.stdout.readline, ''):
- if line[:2] != '==':
- continue
- if line == '':
- skip = False
- elif 'Conditional jump or move' in line:
- skip = True
- elif 'Uninitialised value was created by a stack allocation' in line:
- skip = True
- elif not skip:
- sys.stdout.write (line[9:])
- except OSError:
- Utils.pprint ('YELLOW', 'Install valgrind to perform memory checks')
- except KeyboardInterrupt:
- pass
-
- if not 'MIDORI_UNITS' in os.environ:
- Utils.pprint ('BLUE', 'Set MIDORI_UNITS to select a subset of test cases')
- if not 'MIDORI_TEST' in os.environ:
- Utils.pprint ('BLUE', 'Set MIDORI_TEST to "valgrind" or "callgrind" to perform memory checks')
- if not 'MIDORI_TIMEOUT' in os.environ:
- Utils.pprint ('BLUE', 'Set MIDORI_TIMEOUT to set the maximum test runtime (default: 42)')
- # if test.num_tests_failed > 0 or test.num_tests_err > 0:
- # sys.exit (1)
-