adding all files that were used in gtk2-runtime-2.22.1-2014-02-01-ts-win64.exe

This commit is contained in:
Tom Schoonjans 2014-09-27 19:03:36 +02:00
parent 02aa275afc
commit 27a03f5645
587 changed files with 1107 additions and 105 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,772 @@
#!/usr/bin/env python
#
# Copyright (C) 2006-2008 Async Open Source
# Henrique Romano <henrique@async.com.br>
# Johan Dahlin <jdahlin@async.com.br>
#
# This program 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
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# TODO:
# Toolbars
"""Usage: gtk-builder-convert [OPTION] [INPUT] [OUTPUT]
Converts Glade files into XML files which can be loaded with GtkBuilder.
The [INPUT] file is
-w, --skip-windows Convert everything but GtkWindow subclasses.
-r, --root Convert only widget named root and its children
-h, --help display this help and exit
When OUTPUT is -, write to standard output.
Examples:
gtk-builder-convert preference.glade preferences.ui
Report bugs to http://bugzilla.gnome.org/."""
import getopt
import os
import sys
from xml.dom import minidom, Node
DIALOGS = ['GtkDialog',
'GtkFileChooserDialog',
'GtkMessageDialog']
WINDOWS = ['GtkWindow'] + DIALOGS
# The subprocess is only available in Python 2.4+
try:
import subprocess
subprocess # pyflakes
except ImportError:
subprocess = None
def get_child_nodes(node):
assert node.tagName == 'object'
nodes = []
for child in node.childNodes:
if child.nodeType != Node.ELEMENT_NODE:
continue
if child.tagName != 'child':
continue
nodes.append(child)
return nodes
def get_properties(node):
assert node.tagName == 'object'
properties = {}
for child in node.childNodes:
if child.nodeType != Node.ELEMENT_NODE:
continue
if child.tagName != 'property':
continue
value = child.childNodes[0].data
properties[child.getAttribute('name')] = value
return properties
def get_property(node, property_name):
assert node.tagName == 'object'
properties = get_properties(node)
return properties.get(property_name)
def get_property_node(node, property_name):
assert node.tagName == 'object'
properties = {}
for child in node.childNodes:
if child.nodeType != Node.ELEMENT_NODE:
continue
if child.tagName != 'property':
continue
if child.getAttribute('name') == property_name:
return child
def get_signal_nodes(node):
assert node.tagName == 'object'
signals = []
for child in node.childNodes:
if child.nodeType != Node.ELEMENT_NODE:
continue
if child.tagName == 'signal':
signals.append(child)
return signals
def get_property_nodes(node):
assert node.tagName == 'object'
properties = []
for child in node.childNodes:
if child.nodeType != Node.ELEMENT_NODE:
continue
# FIXME: handle comments
if child.tagName == 'property':
properties.append(child)
return properties
def get_accelerator_nodes(node):
assert node.tagName == 'object'
accelerators = []
for child in node.childNodes:
if child.nodeType != Node.ELEMENT_NODE:
continue
if child.tagName == 'accelerator':
accelerators.append(child)
return accelerators
def get_object_node(child_node):
assert child_node.tagName == 'child', child_node
nodes = []
for node in child_node.childNodes:
if node.nodeType != Node.ELEMENT_NODE:
continue
if node.tagName == 'object':
nodes.append(node)
assert len(nodes) == 1, nodes
return nodes[0]
def copy_properties(node, props, prop_dict):
assert node.tagName == 'object'
for prop_name in props:
child = get_property_node(node, prop_name)
if child is not None:
prop_dict[prop_name] = child
return node
class GtkBuilderConverter(object):
def __init__(self, skip_windows, root):
self.skip_windows = skip_windows
self.root = root
self.root_objects = []
self.objects = {}
#
# Public API
#
def parse_file(self, file):
self._dom = minidom.parse(file)
self._parse()
def parse_buffer(self, buffer):
self._dom = minidom.parseString(buffer)
self._parse()
def to_xml(self):
xml = self._dom.toprettyxml("", "")
return xml.encode('utf-8')
#
# Private
#
def _get_object(self, name):
return self.objects.get(name)
def _get_objects_by_attr(self, attribute, value):
return [w for w in self._dom.getElementsByTagName("object")
if w.getAttribute(attribute) == value]
def _create_object(self, obj_class, obj_id, template=None, properties=None):
"""
Creates a new <object> tag.
Optionally a name template can be provided which will be used
to avoid naming collisions.
The properties dictionary can either contain string values or Node
values. If a node is provided the name of the node will be overridden
by the dictionary key.
@param obj_class: class of the object (class tag)
@param obj_id: identifier of the object (id tag)
@param template: name template to use, for example 'button'
@param properties: dictionary of properties
@type properties: string or Node.
@returns: Newly created node of the object
"""
if template is not None:
count = 1
while True:
obj_id = template + str(count)
widget = self._get_object(obj_id)
if widget is None:
break
count += 1
obj = self._dom.createElement('object')
obj.setAttribute('class', obj_class)
obj.setAttribute('id', obj_id)
if properties:
for name, value in properties.items():
if isinstance(value, Node):
# Reuse the node, so translatable and context still will be
# set when converting nodes. See also #509153
prop = value
else:
prop = self._dom.createElement('property')
prop.appendChild(self._dom.createTextNode(value))
prop.setAttribute('name', str(name))
obj.appendChild(prop)
self.objects[obj_id] = obj
return obj
def _create_root_object(self, obj_class, template, properties=None):
obj = self._create_object(obj_class, None, template, properties)
self.root_objects.append(obj)
return obj
def _parse(self):
glade_iface = self._dom.getElementsByTagName("glade-interface")
assert glade_iface, ("Badly formed XML, there is "
"no <glade-interface> tag.")
# Rename glade-interface to interface
glade_iface[0].tagName = 'interface'
self._interface = glade_iface[0]
# Remove glade-interface doc type
for node in self._dom.childNodes:
if node.nodeType == Node.DOCUMENT_TYPE_NODE:
if node.name == 'glade-interface':
self._dom.removeChild(node)
# Strip unsupported tags
for tag in ['requires', 'requires-version']:
for child in self._dom.getElementsByTagName(tag):
child.parentNode.removeChild(child)
if self.root:
self._strip_root(self.root)
# Rename widget to object
objects = self._dom.getElementsByTagName("widget")
for node in objects:
node.tagName = "object"
for node in objects:
self._convert(node.getAttribute("class"), node)
if self._get_object(node.getAttribute('id')) is not None:
print "WARNING: duplicate id \"" + node.getAttribute('id') + "\""
self.objects[node.getAttribute('id')] = node
# Convert Gazpachos UI tag
for node in self._dom.getElementsByTagName("ui"):
self._convert_ui(node)
# Convert accessibility tag
for node in self._dom.getElementsByTagName("accessibility"):
self._convert_accessibility(node)
# Output the newly created root objects and sort them
# by attribute id
# FIXME: Use sorted(self.root_objects,
# key=lambda n: n.getAttribute('id'),
# reverse=True):
# when we can depend on python 2.4 or higher
root_objects = self.root_objects[:]
root_objects.sort(lambda a, b: cmp(b.getAttribute('id'),
a.getAttribute('id')))
for obj in root_objects:
self._interface.childNodes.insert(0, obj)
def _convert(self, klass, node):
if klass == 'GtkNotebook':
self._packing_prop_to_child_attr(node, "type", "tab")
elif klass in ['GtkExpander', 'GtkFrame']:
self._packing_prop_to_child_attr(
node, "type", "label_item", "label")
elif klass == "GtkMenuBar":
self._convert_menu(node)
elif klass == "GtkMenu":
# Only convert toplevel popups
if node.parentNode == self._interface:
self._convert_menu(node, popup=True)
elif klass in WINDOWS and self.skip_windows:
self._remove_window(node)
self._default_widget_converter(node)
def _default_widget_converter(self, node):
klass = node.getAttribute("class")
for prop in get_property_nodes(node):
prop_name = prop.getAttribute("name")
if prop_name == "sizegroup":
self._convert_sizegroup(node, prop)
elif prop_name == "tooltip" and klass != "GtkAction":
prop.setAttribute("name", "tooltip-text")
elif prop_name in ["response_id", 'response-id']:
# It does not make sense to convert responses when
# we're not going to output dialogs
if self.skip_windows:
continue
object_id = node.getAttribute('id')
response = prop.childNodes[0].data
self._convert_dialog_response(node, object_id, response)
prop.parentNode.removeChild(prop)
elif prop_name == "adjustment":
self._convert_adjustment(prop)
elif prop_name == "items" and klass in ['GtkComboBox',
'GtkComboBoxEntry']:
self._convert_combobox_items(node, prop)
elif prop_name == "text" and klass == 'GtkTextView':
self._convert_textview_text(prop)
def _remove_window(self, node):
object_node = get_object_node(get_child_nodes(node)[0])
parent = node.parentNode
parent.removeChild(node)
parent.appendChild(object_node)
def _convert_menu(self, node, popup=False):
if node.hasAttribute('constructor'):
return
uimgr = self._create_root_object('GtkUIManager',
template='uimanager')
if popup:
name = 'popup'
else:
name = 'menubar'
menu = self._dom.createElement(name)
menu.setAttribute('name', node.getAttribute('id'))
node.setAttribute('constructor', uimgr.getAttribute('id'))
for child in get_child_nodes(node):
obj_node = get_object_node(child)
item = self._convert_menuitem(uimgr, obj_node)
menu.appendChild(item)
child.removeChild(obj_node)
child.parentNode.removeChild(child)
ui = self._dom.createElement('ui')
uimgr.appendChild(ui)
ui.appendChild(menu)
def _convert_menuitem(self, uimgr, obj_node):
children = get_child_nodes(obj_node)
name = 'menuitem'
if children:
child_node = children[0]
menu_node = get_object_node(child_node)
# Can be GtkImage, which will take care of later.
if menu_node.getAttribute('class') == 'GtkMenu':
name = 'menu'
object_class = obj_node.getAttribute('class')
if object_class in ['GtkMenuItem',
'GtkImageMenuItem',
'GtkCheckMenuItem',
'GtkRadioMenuItem']:
menu = self._dom.createElement(name)
elif object_class == 'GtkSeparatorMenuItem':
return self._dom.createElement('separator')
else:
raise NotImplementedError(object_class)
menu.setAttribute('action', obj_node.getAttribute('id'))
self._add_action_from_menuitem(uimgr, obj_node)
if children:
for child in get_child_nodes(menu_node):
obj_node = get_object_node(child)
item = self._convert_menuitem(uimgr, obj_node)
menu.appendChild(item)
child.removeChild(obj_node)
child.parentNode.removeChild(child)
return menu
def _menuitem_to_action(self, node, properties):
copy_properties(node, ['label', 'tooltip'], properties)
def _togglemenuitem_to_action(self, node, properties):
self._menuitem_to_action(node, properties)
copy_properties(node, ['active'], properties)
def _radiomenuitem_to_action(self, node, properties):
self._togglemenuitem_to_action(node, properties)
copy_properties(node, ['group'], properties)
def _add_action_from_menuitem(self, uimgr, node):
properties = {}
object_class = node.getAttribute('class')
object_id = node.getAttribute('id')
if object_class == 'GtkMenuItem':
name = 'GtkAction'
self._menuitem_to_action(node, properties)
elif object_class == 'GtkCheckMenuItem':
name = 'GtkToggleAction'
self._togglemenuitem_to_action(node, properties)
elif object_class == 'GtkRadioMenuItem':
name = 'GtkRadioAction'
self._radiomenuitem_to_action(node, properties)
elif object_class == 'GtkImageMenuItem':
name = 'GtkAction'
children = get_child_nodes(node)
if (children and
children[0].getAttribute('internal-child') == 'image'):
image = get_object_node(children[0])
child = get_property_node(image, 'stock')
if child is not None:
properties['stock_id'] = child
self._menuitem_to_action(node, properties)
elif object_class == 'GtkSeparatorMenuItem':
return
else:
raise NotImplementedError(object_class)
if get_property(node, 'use_stock') == 'True':
if 'label' in properties:
properties['stock_id'] = properties['label']
del properties['label']
properties['name'] = object_id
action = self._create_object(name,
object_id,
properties=properties)
for signal in get_signal_nodes(node):
signal_name = signal.getAttribute('name')
if signal_name in ['activate', 'toggled']:
action.appendChild(signal)
else:
print 'Unhandled signal %s::%s' % (node.getAttribute('class'),
signal_name)
if not uimgr.childNodes:
child = self._dom.createElement('child')
uimgr.appendChild(child)
group = self._create_object('GtkActionGroup', None,
template='actiongroup')
child.appendChild(group)
else:
group = uimgr.childNodes[0].childNodes[0]
child = self._dom.createElement('child')
group.appendChild(child)
child.appendChild(action)
for accelerator in get_accelerator_nodes(node):
signal_name = accelerator.getAttribute('signal')
if signal_name != 'activate':
print 'Unhandled accelerator signal for %s::%s' % (
node.getAttribute('class'), signal_name)
continue
accelerator.removeAttribute('signal')
child.appendChild(accelerator)
def _convert_sizegroup(self, node, prop):
# This is Gazpacho only
node.removeChild(prop)
obj = self._get_object(prop.childNodes[0].data)
if obj is None:
widgets = self._get_objects_by_attr("class", "GtkSizeGroup")
if widgets:
obj = widgets[-1]
else:
obj = self._create_root_object('GtkSizeGroup',
template='sizegroup')
widgets = obj.getElementsByTagName("widgets")
if widgets:
assert len(widgets) == 1
widgets = widgets[0]
else:
widgets = self._dom.createElement("widgets")
obj.appendChild(widgets)
member = self._dom.createElement("widget")
member.setAttribute("name", node.getAttribute("id"))
widgets.appendChild(member)
def _convert_dialog_response(self, node, object_name, response):
# 1) Get parent dialog node
while True:
# If we can't find the parent dialog, give up
if node == self._dom:
return
if (node.tagName == 'object' and
node.getAttribute('class') in DIALOGS):
dialog = node
break
node = node.parentNode
assert node
# 2) Get dialogs action-widgets tag, create if not found
for child in dialog.childNodes:
if child.nodeType != Node.ELEMENT_NODE:
continue
if child.tagName == 'action-widgets':
actions = child
break
else:
actions = self._dom.createElement("action-widgets")
dialog.appendChild(actions)
# 3) Add action-widget tag for the response
action = self._dom.createElement("action-widget")
action.setAttribute("response", response)
action.appendChild(self._dom.createTextNode(object_name))
actions.appendChild(action)
def _convert_adjustment(self, prop):
properties = {}
if prop.childNodes:
data = prop.childNodes[0].data
value, lower, upper, step, page, page_size = data.split(' ')
properties.update(value=value,
lower=lower,
upper=upper,
step_increment=step,
page_increment=page,
page_size=page_size)
else:
prop.appendChild(self._dom.createTextNode(""))
adj = self._create_root_object("GtkAdjustment",
template='adjustment',
properties=properties)
prop.childNodes[0].data = adj.getAttribute('id')
def _convert_combobox_items(self, node, prop):
parent = prop.parentNode
if not prop.childNodes:
parent.removeChild(prop)
return
translatable_attr = prop.attributes.get('translatable')
translatable = translatable_attr is not None and translatable_attr.value == 'yes'
has_context_attr = prop.attributes.get('context')
has_context = has_context_attr is not None and has_context_attr.value == 'yes'
comments_attr = prop.attributes.get('comments')
comments = comments_attr is not None and comments_attr.value or None
value = prop.childNodes[0].data
model = self._create_root_object("GtkListStore",
template="model")
columns = self._dom.createElement('columns')
model.appendChild(columns)
column = self._dom.createElement('column')
column.setAttribute('type', 'gchararray')
columns.appendChild(column)
data = self._dom.createElement('data')
model.appendChild(data)
if value.endswith('\n'):
value = value[:-1]
for item in value.split('\n'):
row = self._dom.createElement('row')
data.appendChild(row)
col = self._dom.createElement('col')
col.setAttribute('id', '0')
if translatable:
col.setAttribute('translatable', 'yes')
if has_context:
splitting = item.split('|', 1)
if len(splitting) == 2:
context, item = splitting
col.setAttribute('context', context)
if comments is not None:
col.setAttribute('comments', comments)
col.appendChild(self._dom.createTextNode(item))
row.appendChild(col)
model_prop = self._dom.createElement('property')
model_prop.setAttribute('name', 'model')
model_prop.appendChild(
self._dom.createTextNode(model.getAttribute('id')))
parent.appendChild(model_prop)
parent.removeChild(prop)
child = self._dom.createElement('child')
node.appendChild(child)
cell_renderer = self._create_object('GtkCellRendererText', None,
template='renderer')
child.appendChild(cell_renderer)
attributes = self._dom.createElement('attributes')
child.appendChild(attributes)
attribute = self._dom.createElement('attribute')
attributes.appendChild(attribute)
attribute.setAttribute('name', 'text')
attribute.appendChild(self._dom.createTextNode('0'))
def _convert_textview_text(self, prop):
if not prop.childNodes:
prop.parentNode.removeChild(prop)
return
data = prop.childNodes[0].data
if prop.hasAttribute('translatable'):
prop.removeAttribute('translatable')
tbuffer = self._create_root_object("GtkTextBuffer",
template='textbuffer',
properties=dict(text=data))
prop.childNodes[0].data = tbuffer.getAttribute('id')
prop.setAttribute('name', 'buffer')
def _packing_prop_to_child_attr(self, node, prop_name, prop_val,
attr_val=None):
for child in get_child_nodes(node):
packing_props = [p for p in child.childNodes if p.nodeName == "packing"]
if not packing_props:
continue
assert len(packing_props) == 1
packing_prop = packing_props[0]
properties = packing_prop.getElementsByTagName("property")
for prop in properties:
if (prop.getAttribute("name") != prop_name or
prop.childNodes[0].data != prop_val):
continue
packing_prop.removeChild(prop)
child.setAttribute(prop_name, attr_val or prop_val)
if len(properties) == 1:
child.removeChild(packing_prop)
def _convert_ui(self, node):
cdata = node.childNodes[0]
data = cdata.toxml().strip()
if not data.startswith("<![CDATA[") or not data.endswith("]]>"):
return
data = data[9:-3]
child = minidom.parseString(data).childNodes[0]
nodes = child.childNodes[:]
for child_node in nodes:
node.appendChild(child_node)
node.removeChild(cdata)
if not node.hasAttribute("id"):
return
# Updating references made by widgets
parent_id = node.parentNode.getAttribute("id")
for widget in self._get_objects_by_attr("constructor",
node.getAttribute("id")):
widget.getAttributeNode("constructor").value = parent_id
node.removeAttribute("id")
def _convert_accessibility(self, node):
objectNode = node.parentNode
parent_id = objectNode.getAttribute("id")
properties = {}
for node in node.childNodes:
if node.nodeName == 'atkproperty':
node.tagName = 'property'
properties[node.getAttribute('name')] = node
node.parentNode.removeChild(node)
elif node.nodeName == 'atkrelation':
node.tagName = 'relation'
relation_type = node.getAttribute('type')
relation_type = relation_type.replace('_', '-')
node.setAttribute('type', relation_type)
elif node.nodeName == 'atkaction':
node.tagName = 'action'
if properties:
child = self._dom.createElement('child')
child.setAttribute("internal-child", "accessible")
atkobject = self._create_object(
"AtkObject", None,
template='a11y-%s' % (parent_id,),
properties=properties)
child.appendChild(atkobject)
objectNode.appendChild(child)
def _strip_root(self, root_name):
for widget in self._dom.getElementsByTagName("widget"):
if widget.getAttribute('id') == root_name:
break
else:
raise SystemExit("Could not find an object called `%s'" % (
root_name))
for child in self._interface.childNodes[:]:
if child.nodeType != Node.ELEMENT_NODE:
continue
child.parentNode.removeChild(child)
self._interface.appendChild(widget)
def _indent(output):
if not subprocess:
return output
for directory in os.environ['PATH'].split(os.pathsep):
filename = os.path.join(directory, 'xmllint')
if os.path.exists(filename):
break
else:
return output
s = subprocess.Popen([filename, '--format', '-'],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
s.stdin.write(output)
s.stdin.close()
return s.stdout.read()
def usage():
print __doc__
def main(args):
try:
opts, args = getopt.getopt(args[1:], "hwr:",
["help", "skip-windows", "root="])
except getopt.GetoptError:
usage()
return 2
if len(args) != 2:
usage()
return 2
input_filename, output_filename = args
skip_windows = False
split = False
root = None
for o, a in opts:
if o in ("-h", "--help"):
usage()
sys.exit()
elif o in ("-r", "--root"):
root = a
elif o in ("-w", "--skip-windows"):
skip_windows = True
conv = GtkBuilderConverter(skip_windows=skip_windows,
root=root)
conv.parse_file(input_filename)
xml = _indent(conv.to_xml())
if output_filename == "-":
print xml
else:
open(output_filename, 'w').write(xml)
print "Wrote", output_filename
return 0
if __name__ == "__main__":
sys.exit(main(sys.argv))

Binary file not shown.

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0"
processorArchitecture="AMD64"
name="gtk-update-icon-cache.exe"
type="win32"/>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -11,11 +11,11 @@
; should be installable side by side with this package.
!define GTK_VERSION "2.24.10"
!define GTK_VERSION "2.22.1"
!define GTK_BIN_VERSION "2.10.0"
!define PRODUCT_VERSION "${GTK_VERSION}-2012-10-10-ash"
!define PRODUCT_NAME "GTK2-Runtime"
!define PRODUCT_PUBLISHER "Alexander Shaduri"
!define PRODUCT_VERSION "${GTK_VERSION}-2014-02-01-ts-win64"
!define PRODUCT_NAME "GTK2-Runtime Win64"
!define PRODUCT_PUBLISHER "Tom Schoonjans"
!define PRODUCT_WEB_SITE "http://gtk-win.sourceforge.net"
!define INSTALLER_OUTPUT_FILE "gtk2-runtime-${PRODUCT_VERSION}.exe"
@ -31,6 +31,8 @@
!include nsi_env_var_update.nsh ; EnvVar* functions
!include "FileFunc.nsh" ; GetOptions
!include "x64.nsh"
!include "LogicLib.nsh"
; --------------- General Settings
@ -53,7 +55,7 @@ OutFile "${INSTALLER_OUTPUT_FILE}"
; The Default Installation Directory
InstallDir "$PROGRAMFILES\${PRODUCT_NAME}"
InstallDir "$PROGRAMFILES64\${PRODUCT_NAME}"
;InstallDir "$WINDIR"
; Detect the old installation
InstallDirRegKey HKLM "SOFTWARE\${PRODUCT_NAME}" ""
@ -128,7 +130,6 @@ var install_option_setpath ; set PATH: yes (default), no
var install_option_dllpath ; bin (default), lib, root
var install_option_sideeffects ; yes (default), no. no = don't write to registry, PATH or start menu.
var install_option_translations ; install translations: yes, no (default)
var install_option_compatdlls ; install compatibility dlls: yes, no (default)
var install_option_removeold ; uninstall the old version first (if present): yes (default), no.
var LIB_INSTDIR
@ -217,7 +218,6 @@ InstType "Recommended" ; 1
InstType "Full" ; 2
var SEC_COMPATDLLS_INSTALLED
var SEC_TRANSLATIONS_INSTALLED
@ -231,29 +231,29 @@ SectionIn 1 2 RO
; NOTE: If you add or remove any of these,
; be sure to do the same in the uninstall section.
File freetype6.dll ; freetype is needed for ft2 pango backend
File intl.dll ; gettext, needed by all i18n libs
File libatk-1.0-0.dll ; atk
File libcairo-2.dll ; cairo, needed by gtk
File libcairo-gobject-2.dll ; cairo. Doesn't seem to be required, but since we're distributing cairo...
File libcairo-script-interpreter-2.dll ; cairo. Doesn't seem to be required, but since we're distributing cairo...
File libexpat-1.dll ; fontconfig needs this
File libfontconfig-1.dll ; fontconfig is needed for ft2 pango backend
File libgailutil-18.dll ; from gtk
File libgdk_pixbuf-2.0-0.dll ; from gtk
File libgdk-win32-2.0-0.dll ; from gtk
File libgio-2.0-0.dll ; from glib
File libglib-2.0-0.dll ; glib
File libgmodule-2.0-0.dll ; from glib
File libgobject-2.0-0.dll ; from glib
File libgthread-2.0-0.dll ; from glib
File libgtk-win32-2.0-0.dll ; gtk
File libpango-1.0-0.dll ; pango, needed by gtk
File libpangocairo-1.0-0.dll ; pango, needed by gtk
File libpangoft2-1.0-0.dll ; pango, needed by gtk
File libpangowin32-1.0-0.dll ; pango, needed by gtk
File libpng14-14.dll ; for gdk_pixbuf loader.
File zlib1.dll ; png and many others need this
File bin\libfreetype-6.dll ; freetype is needed for ft2 pango backend
File bin\libintl-8.dll ; gettext, needed by all i18n libs
File bin\libatk-1.0-0.dll ; atk
File bin\libcairo-2.dll ; cairo, needed by gtk
File bin\libcairo-gobject-2.dll ; cairo. Doesn't seem to be required, but since we're distributing cairo...
File bin\libcairo-script-interpreter-2.dll ; cairo. Doesn't seem to be required, but since we're distributing cairo...
File bin\libexpat-1.dll ; fontconfig needs this
File bin\libfontconfig-1.dll ; fontconfig is needed for ft2 pango backend
File bin\libgailutil-18.dll ; from gtk
File bin\libgdk_pixbuf-2.0-0.dll ; from gtk
File bin\libgdk-win32-2.0-0.dll ; from gtk
File bin\libgio-2.0-0.dll ; from glib
File bin\libglib-2.0-0.dll ; glib
File bin\libgmodule-2.0-0.dll ; from glib
File bin\libgobject-2.0-0.dll ; from glib
File bin\libgthread-2.0-0.dll ; from glib
File bin\libgtk-win32-2.0-0.dll ; gtk
File bin\libpango-1.0-0.dll ; pango, needed by gtk
File bin\libpangocairo-1.0-0.dll ; pango, needed by gtk
File bin\libpangoft2-1.0-0.dll ; pango, needed by gtk
File bin\libpangowin32-1.0-0.dll ; pango, needed by gtk
File bin\libpng14-14.dll ; for gdk_pixbuf loader.
File bin\zlib1.dll ; png and many others need this
; We install this into the same place as the DLLs to avoid any PATH manipulation.
@ -261,8 +261,8 @@ SectionIn 1 2 RO
File bin\fc-cache.exe
File bin\fc-list.exe
File bin\gdk-pixbuf-query-loaders.exe ; from gdk_pixbuf
File bin\gspawn-win32-helper.exe
File bin\gspawn-win32-helper-console.exe
File bin\gspawn-win64-helper.exe
File bin\gspawn-win64-helper-console.exe
File bin\gtk-query-immodules-2.0.exe
File bin\gtk-update-icon-cache.exe
File bin\gtk-update-icon-cache.exe.manifest
@ -330,44 +330,6 @@ SectionEnd ; end of gtk section
Section "Compatibility DLLs" SecCompatDlls
SectionIn 2
SetShellVarContext all ; use all user variables as opposed to current user
StrCpy $SEC_COMPATDLLS_INSTALLED "1"
SetOverwrite On
SetOutPath "$LIB_INSTDIR"
; NOTE: If you add or remove any of these,
; be sure to do the same in the uninstall section.
; Jernej's installer contains these files in addition to the above:
; File charset.dll ; from iconv package, for tools?
; File iconv.exe
; File libpng12.dll
; File libxml2.dll
; File xmlparse.dll ; for old? fontconfig
; File xmltok.dll ; for old? fontconfig
; obsolete libs - not needed by gtk or any of its deps
; File libimage.dll ; from libtiff-deps package, for tools?
; File librle3.dll ; dep of libjpg tools?
; for compatibility only
File jpeg62.dll ; used to be in the runtime
File libjpeg-7.dll ; used to be in the runtime. also libtiff needs this.
File libtiff3.dll ; used to be in the runtime
File libtiff-3.dll ; used to be in the runtime
File libpng12.dll ; used to be in the runtime
File libpng12-0.dll ; used to be in the runtime
; iconv was needed by intl (?) and glib, but they don't need it anymore
; (as of glib 2.12.5). It's also used by libxml2, and packages
; (e.g. pidgin) expect it to be in gtk installer because it used
; to be with glib. we use mini (but compatible) version here.
File iconv.dll ; compatibility (see above)
SectionEnd
Section "Translations" SecTranslations
@ -390,8 +352,7 @@ SectionEnd
; Section descriptions
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecGTK} "GTK+ Runtime Libraries"
!insertmacro MUI_DESCRIPTION_TEXT ${SecCompatDlls} "DLLs for compatibility with older or incorrectly packaged programs"
!insertmacro MUI_DESCRIPTION_TEXT ${SecGTK} "GTK+ 64-bit Runtime Libraries"
!insertmacro MUI_DESCRIPTION_TEXT ${SecTranslations} "Additional translations (some are incomplete)"
!insertmacro MUI_FUNCTION_DESCRIPTION_END
@ -401,17 +362,23 @@ SectionEnd
; Executed on installer run
Function .onInit
SetShellVarContext all ; use all user variables as opposed to current user
${IfNot} ${RunningX64}
MessageBox MB_OK|MB_ICONEXCLAMATION "This installation requires a 64-bit Windows system" /SD IDOK
Abort
${EndIf}
SetRegView 64
!insertmacro INSTALLOPTIONS_EXTRACT "nsi_pathpage.ini"
StrCpy $SEC_COMPATDLLS_INSTALLED "0" ; set to 1 in appropriate section
StrCpy $SEC_TRANSLATIONS_INSTALLED "0" ; set to 1 in appropriate section
${GetOptions} "$CMDLINE" "/setpath=" $install_option_setpath
${GetOptions} "$CMDLINE" "/dllpath=" $install_option_dllpath
${GetOptions} "$CMDLINE" "/sideeffects=" $install_option_sideeffects
${GetOptions} "$CMDLINE" "/translations=" $install_option_translations
${GetOptions} "$CMDLINE" "/compatdlls=" $install_option_compatdlls
${GetOptions} "$CMDLINE" "/removeold=" $install_option_removeold
; Debug stuff
@ -430,15 +397,6 @@ Function .onInit
init_sideeffects_exit:
; enable compat dlls if requested through command line
StrCmp $install_option_compatdlls "yes" "" no_compatdlls
push $R0
SectionGetFlags ${SecCompatDlls} $R0
IntOp $R0 $R0 | ${SF_SELECTED}
SectionSetFlags ${SecCompatDlls} $R0
pop $R0
no_compatdlls:
; enable translations if requested through command line
StrCmp $install_option_translations "yes" "" no_translations
push $R0
@ -506,7 +464,6 @@ Section -post
WriteRegStr HKLM "SOFTWARE\${PRODUCT_NAME}" "DllDirName" "$DLL_DIR_NAME" ; lib, bin, or ""
WriteRegStr HKLM "SOFTWARE\${PRODUCT_NAME}" "UsingSystemPath" $ADD_TO_PATH
WriteRegStr HKLM "SOFTWARE\${PRODUCT_NAME}" "CompatDllsInstalled" $SEC_COMPATDLLS_INSTALLED
WriteRegStr HKLM "SOFTWARE\${PRODUCT_NAME}" "TranslationsInstalled" $SEC_TRANSLATIONS_INSTALLED
; compat with installer from http://gimp-win.sourceforge.net/
@ -556,7 +513,6 @@ var uninstall_option_sideeffects ; yes (default), no. Use if it was installed w
; These are used only if /sideffects=no :
var uninstall_option_dllpath ; uninstall dlls from: bin (default), lib, root.
var uninstall_option_translations ; uninstall translations: yes, no (default)
var uninstall_option_compatdlls ; uninstall compatibility dlls: yes, no (default)
Function un.onInit
@ -564,7 +520,6 @@ Function un.onInit
${GetOptions} "$CMDLINE" "/sideeffects=" $uninstall_option_sideeffects
${GetOptions} "$CMDLINE" "/dllpath=" $uninstall_option_dllpath
${GetOptions} "$CMDLINE" "/translations=" $uninstall_option_translations
${GetOptions} "$CMDLINE" "/compatdlls=" $uninstall_option_compatdlls
FunctionEnd
@ -594,16 +549,16 @@ Function un.DeleteDlls
Delete $LIB_INSTDIR\fc-cache.exe
Delete $LIB_INSTDIR\fc-list.exe
Delete $LIB_INSTDIR\gdk-pixbuf-query-loaders.exe
Delete $LIB_INSTDIR\gspawn-win32-helper.exe
Delete $LIB_INSTDIR\gspawn-win32-helper-console.exe
Delete $LIB_INSTDIR\gspawn-win64-helper.exe
Delete $LIB_INSTDIR\gspawn-win64-helper-console.exe
Delete $LIB_INSTDIR\gtk-query-immodules-2.0.exe
Delete $LIB_INSTDIR\gtk-update-icon-cache.exe
Delete $LIB_INSTDIR\gtk-update-icon-cache.exe.manifest
Delete $LIB_INSTDIR\pango-querymodules.exe
; dlls
Delete $LIB_INSTDIR\freetype6.dll ; freetype is needed for ft2 pango backend
Delete $LIB_INSTDIR\intl.dll ; gettext, needed by all i18n libs
Delete $LIB_INSTDIR\libfreetype-6.dll ; freetype is needed for ft2 pango backend
Delete $LIB_INSTDIR\libintl-8.dll ; gettext, needed by all i18n libs
Delete $LIB_INSTDIR\libatk-1.0-0.dll ; atk
Delete $LIB_INSTDIR\libcairo-2.dll ; cairo, needed by gtk
Delete $LIB_INSTDIR\libcairo-gobject-2.dll ; cairo. Doesn't seem to be required, but since we're distributing cairo...
@ -626,15 +581,6 @@ Function un.DeleteDlls
Delete $LIB_INSTDIR\libpng14-14.dll ; for gdk_pixbuf loader.
Delete $LIB_INSTDIR\zlib1.dll ; png and many others need this
StrCmp $SEC_COMPATDLLS_INSTALLED "1" "" un_nocompatdlls
Delete $LIB_INSTDIR\jpeg62.dll ; used to be in the runtime
Delete $LIB_INSTDIR\libjpeg-7.dll ; used to be in the runtime. also libtiff needs this.
Delete $LIB_INSTDIR\libtiff3.dll ; used to be in the runtime
Delete $LIB_INSTDIR\libtiff-3.dll ; used to be in the runtime
Delete $LIB_INSTDIR\libpng12.dll ; used to be in the runtime
Delete $LIB_INSTDIR\libpng12-0.dll ; used to be in the runtime
Delete $LIB_INSTDIR\iconv.dll ; compatibility
un_nocompatdlls:
FunctionEnd
@ -659,7 +605,6 @@ Section Uninstall
ReadRegStr $LIB_INSTDIR HKLM "SOFTWARE\${PRODUCT_NAME}" "DllPath"
ReadRegStr $DLL_DIR_NAME HKLM "SOFTWARE\${PRODUCT_NAME}" "DllDirName"
ReadRegStr $ADD_TO_PATH HKLM "SOFTWARE\${PRODUCT_NAME}" "UsingSystemPath"
ReadRegStr $SEC_COMPATDLLS_INSTALLED HKLM "SOFTWARE\${PRODUCT_NAME}" "CompatDllsInstalled"
ReadRegStr $SEC_TRANSLATIONS_INSTALLED HKLM "SOFTWARE\${PRODUCT_NAME}" "TranslationsInstalled"
DeleteRegKey HKLM "SOFTWARE\GTK\2.0" ; dropline, etc...
@ -693,10 +638,6 @@ Section Uninstall
uninst_no_sideeffects:
Strcpy $SEC_COMPATDLLS_INSTALLED "0"
StrCmp $uninstall_option_compatdlls "yes" "" nodelete_compatdlls
Strcpy $SEC_COMPATDLLS_INSTALLED "1"
nodelete_compatdlls:
Strcpy $SEC_TRANSLATIONS_INSTALLED "0"
StrCmp $uninstall_option_translations "yes" "" nodelete_translations
@ -946,4 +887,4 @@ FunctionEnd
; eof
; eof

View File

@ -0,0 +1,13 @@
# Note: After adding a new separate gdk-pixbuf loader (for instance the svg one)
# run gdk-pixbuf-query-loaders.exe redirecting its output into this file.
# Note that the LoaderDir folder below does not name a folder that is
# expected to exist. It was just a temporary directory used at build time.
# GdkPixbuf Image Loader Modules file
# Automatically generated file, do not edit
# Created by gdk-pixbuf-query-loaders.exe from gdk-pixbuf-2.22.1
#
# LoaderDir = c:\devel\target\bc8822b8b54ff8fc65f69cf77a13dc59/lib/gdk-pixbuf-2.0/2.10.0/loaders
#

Some files were not shown because too many files have changed in this diff Show More