diff options
Diffstat (limited to 'capplets/network')
-rw-r--r-- | capplets/network/Makefile.am | 50 | ||||
-rw-r--r-- | capplets/network/icons/16x16/mate-network-properties.png | bin | 0 -> 824 bytes | |||
-rw-r--r-- | capplets/network/icons/22x22/mate-network-properties.png | bin | 0 -> 1081 bytes | |||
-rw-r--r-- | capplets/network/icons/24x24/mate-network-properties.png | bin | 0 -> 1081 bytes | |||
-rw-r--r-- | capplets/network/icons/32x32/mate-network-properties.png | bin | 0 -> 1855 bytes | |||
-rw-r--r-- | capplets/network/icons/48x48/mate-network-properties.png | bin | 0 -> 3191 bytes | |||
-rw-r--r-- | capplets/network/icons/scalable/mate-network-properties.svg | 628 | ||||
-rw-r--r-- | capplets/network/mate-network-properties.c | 1397 | ||||
-rw-r--r-- | capplets/network/mate-network-properties.desktop.in.in | 14 | ||||
-rw-r--r-- | capplets/network/mate-network-properties.ui | 1056 |
10 files changed, 3145 insertions, 0 deletions
diff --git a/capplets/network/Makefile.am b/capplets/network/Makefile.am new file mode 100644 index 00000000..823dfc48 --- /dev/null +++ b/capplets/network/Makefile.am @@ -0,0 +1,50 @@ +# This is used in MATECC_CAPPLETS_CFLAGS +cappletname = network + +bin_PROGRAMS = mate-network-properties + +mate_network_properties_SOURCES = mate-network-properties.c +mate_network_properties_LDADD = $(MATECC_CAPPLETS_LIBS) + +@INTLTOOL_DESKTOP_RULE@ + +uidir = $(pkgdatadir)/ui +dist_ui_DATA = mate-network-properties.ui + +icons16dir = $(datadir)/icons/hicolor/16x16/apps +dist_icons16_DATA = icons/16x16/mate-network-properties.png +icons22dir = $(datadir)/icons/hicolor/22x22/apps +dist_icons22_DATA = icons/22x22/mate-network-properties.png +icons24dir = $(datadir)/icons/hicolor/24x24/apps +dist_icons24_DATA = icons/24x24/mate-network-properties.png +icons32dir = $(datadir)/icons/hicolor/32x32/apps +dist_icons32_DATA = icons/32x32/mate-network-properties.png +icons48dir = $(datadir)/icons/hicolor/48x48/apps +dist_icons48_DATA = icons/48x48/mate-network-properties.png +iconssvgdir = $(datadir)/icons/hicolor/scalable/apps +dist_iconssvg_DATA = icons/scalable/mate-network-properties.svg + +desktopdir = $(datadir)/applications +desktop_in_files = mate-network-properties.desktop.in +desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) + +INCLUDES = \ + $(MATECC_CAPPLETS_CFLAGS) \ + -DMATELOCALEDIR="\"$(datadir)/locale\"" \ + -DMATECC_UI_DIR="\"$(uidir)\"" + +gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor +uninstall-hook: update-icon-cache +install-data-hook: update-icon-cache +update-icon-cache: + @-if test -z "$(DESTDIR)"; then \ + echo "Updating Gtk icon cache."; \ + $(gtk_update_icon_cache); \ + else \ + echo "*** Icon cache not updated. After install, run this:"; \ + echo "*** $(gtk_update_icon_cache)"; \ + fi + +CLEANFILES = $(MATECC_CAPPLETS_CLEANFILES) $(desktop_in_files) $(desktop_DATA) + +-include $(top_srcdir)/git.mk diff --git a/capplets/network/icons/16x16/mate-network-properties.png b/capplets/network/icons/16x16/mate-network-properties.png Binary files differnew file mode 100644 index 00000000..ebacb983 --- /dev/null +++ b/capplets/network/icons/16x16/mate-network-properties.png diff --git a/capplets/network/icons/22x22/mate-network-properties.png b/capplets/network/icons/22x22/mate-network-properties.png Binary files differnew file mode 100644 index 00000000..a5fb9e01 --- /dev/null +++ b/capplets/network/icons/22x22/mate-network-properties.png diff --git a/capplets/network/icons/24x24/mate-network-properties.png b/capplets/network/icons/24x24/mate-network-properties.png Binary files differnew file mode 100644 index 00000000..e743c831 --- /dev/null +++ b/capplets/network/icons/24x24/mate-network-properties.png diff --git a/capplets/network/icons/32x32/mate-network-properties.png b/capplets/network/icons/32x32/mate-network-properties.png Binary files differnew file mode 100644 index 00000000..826d99d8 --- /dev/null +++ b/capplets/network/icons/32x32/mate-network-properties.png diff --git a/capplets/network/icons/48x48/mate-network-properties.png b/capplets/network/icons/48x48/mate-network-properties.png Binary files differnew file mode 100644 index 00000000..e3a4ce28 --- /dev/null +++ b/capplets/network/icons/48x48/mate-network-properties.png diff --git a/capplets/network/icons/scalable/mate-network-properties.svg b/capplets/network/icons/scalable/mate-network-properties.svg new file mode 100644 index 00000000..71ef6762 --- /dev/null +++ b/capplets/network/icons/scalable/mate-network-properties.svg @@ -0,0 +1,628 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="48px" + height="48px" + id="svg7195" + sodipodi:version="0.32" + inkscape:version="0.45+devel" + sodipodi:docbase="/home/cornelius/Desktop" + sodipodi:docname="network-proxy-48.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="/home/cornelius/Desktop/network-proxy-48.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs7197"> + <linearGradient + id="linearGradient5466" + inkscape:collect="always"> + <stop + id="stop5468" + offset="0" + style="stop-color:#555753;stop-opacity:1" /> + <stop + id="stop5470" + offset="1" + style="stop-color:#888a85;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5466" + id="linearGradient5538" + gradientUnits="userSpaceOnUse" + x1="37.870998" + y1="12.5" + x2="47.965992" + y2="13.076671" + gradientTransform="translate(-1,0)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6393" + id="linearGradient5540" + gradientUnits="userSpaceOnUse" + x1="38.520752" + y1="12.5" + x2="47.863831" + y2="12.5" + gradientTransform="translate(-1,0)" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5060" + id="radialGradient5546" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-2.751545,0,0,1.969706,92.22831,-876.5339)" + cx="602.66046" + cy="488.07956" + fx="602.66046" + fy="488.07956" + r="117.14286" /> + <linearGradient + inkscape:collect="always" + id="linearGradient5060"> + <stop + style="stop-color:black;stop-opacity:1;" + offset="0" + id="stop5062" /> + <stop + style="stop-color:black;stop-opacity:0;" + offset="1" + id="stop5064" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5060" + id="radialGradient5544" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.7515457,0,0,1.969706,-1568.5757,-873.7569)" + cx="605.71429" + cy="486.64789" + fx="605.71429" + fy="486.64789" + r="117.14286" /> + <linearGradient + id="linearGradient5048"> + <stop + style="stop-color:black;stop-opacity:0;" + offset="0" + id="stop5050" /> + <stop + id="stop5056" + offset="0.5" + style="stop-color:black;stop-opacity:1;" /> + <stop + style="stop-color:black;stop-opacity:0;" + offset="1" + id="stop5052" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5048" + id="linearGradient5542" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(3.4289406,0,0,1.969706,-1977.4912,-872.8854)" + x1="302.85715" + y1="366.64789" + x2="302.85715" + y2="609.50507" /> + <linearGradient + id="linearGradient5459" + inkscape:collect="always"> + <stop + id="stop5461" + offset="0" + style="stop-color:#555753;stop-opacity:1" /> + <stop + id="stop5463" + offset="1" + style="stop-color:#888a85;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5459" + id="linearGradient5548" + gradientUnits="userSpaceOnUse" + x1="24.399277" + y1="35.275932" + x2="31.843159" + y2="47.757107" + gradientTransform="translate(-1,0)" /> + <linearGradient + id="linearGradient5429" + inkscape:collect="always"> + <stop + id="stop5431" + offset="0" + style="stop-color:#555753;stop-opacity:1" /> + <stop + id="stop5433" + offset="1" + style="stop-color:#888a85;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5429" + id="linearGradient5550" + gradientUnits="userSpaceOnUse" + x1="24.399277" + y1="35.275932" + x2="44.067654" + y2="47.80442" + gradientTransform="translate(-1,0)" /> + <linearGradient + id="linearGradient5423" + inkscape:collect="always"> + <stop + id="stop5425" + offset="0" + style="stop-color:#555753;stop-opacity:1" /> + <stop + id="stop5427" + offset="1" + style="stop-color:#888a85;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5423" + id="linearGradient5552" + gradientUnits="userSpaceOnUse" + x1="24.399277" + y1="35.275932" + x2="50" + y2="41.644268" + gradientTransform="translate(-1,0)" /> + <linearGradient + id="linearGradient5447" + inkscape:collect="always"> + <stop + id="stop5449" + offset="0" + style="stop-color:#555753;stop-opacity:1" /> + <stop + id="stop5451" + offset="1" + style="stop-color:#888a85;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5447" + id="linearGradient5554" + gradientUnits="userSpaceOnUse" + x1="24.399277" + y1="35.275932" + x2="17.209641" + y2="47.548927" + gradientTransform="translate(-1,0)" /> + <linearGradient + id="linearGradient5441" + inkscape:collect="always"> + <stop + id="stop5443" + offset="0" + style="stop-color:#555753;stop-opacity:1" /> + <stop + id="stop5445" + offset="1" + style="stop-color:#888a85;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5441" + id="linearGradient5556" + gradientUnits="userSpaceOnUse" + x1="24.399277" + y1="35.275932" + x2="6.1469398" + y2="46.668907" + gradientTransform="translate(-1,0)" /> + <linearGradient + inkscape:collect="always" + id="linearGradient6294"> + <stop + style="stop-color:#ffffff;stop-opacity:1" + offset="0" + id="stop6296" /> + <stop + style="stop-color:#eeeeec;stop-opacity:1" + offset="1" + id="stop6298" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6294" + id="linearGradient5558" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.375,0,0,1.2857143,-10.1875,-3.2857142)" + x1="26.820854" + y1="5.9706759" + x2="26.820854" + y2="12.407513" /> + <linearGradient + inkscape:collect="always" + id="linearGradient6427"> + <stop + style="stop-color:#d3d7cf;stop-opacity:1;" + offset="0" + id="stop6429" /> + <stop + style="stop-color:#d3d7cf;stop-opacity:0;" + offset="1" + id="stop6431" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6427" + id="linearGradient5560" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-1,1)" + x1="41.570694" + y1="32.504398" + x2="18.827377" + y2="6" /> + <linearGradient + id="linearGradient5435" + inkscape:collect="always"> + <stop + id="stop5437" + offset="0" + style="stop-color:#555753;stop-opacity:1" /> + <stop + id="stop5439" + offset="1" + style="stop-color:#888a85;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5435" + id="linearGradient5562" + gradientUnits="userSpaceOnUse" + x1="22.280706" + y1="35" + x2="2.1575336" + y2="41.171135" + gradientTransform="translate(-1,0)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6393" + id="linearGradient5564" + gradientUnits="userSpaceOnUse" + x1="27.060818" + y1="36.950813" + x2="43.95985" + y2="47.034103" + gradientTransform="translate(-1,0)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6393" + id="linearGradient5566" + gradientUnits="userSpaceOnUse" + x1="24.408333" + y1="35.758526" + x2="-0.58516204" + y2="42" + gradientTransform="translate(-1,0)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6393" + id="linearGradient5568" + gradientUnits="userSpaceOnUse" + x1="24.408333" + y1="35.758526" + x2="6.735868" + y2="46.911091" + gradientTransform="translate(-1,0)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6393" + id="linearGradient5570" + gradientUnits="userSpaceOnUse" + x1="25.702541" + y1="38.042225" + x2="32.307709" + y2="48.084454" + gradientTransform="translate(-1,0)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6393" + id="linearGradient5572" + gradientUnits="userSpaceOnUse" + x1="24.408333" + y1="35.758526" + x2="16.728512" + y2="48.084454" + gradientTransform="translate(-1,0)" /> + <linearGradient + inkscape:collect="always" + id="linearGradient6393"> + <stop + style="stop-color:#eeeeec;stop-opacity:1;" + offset="0" + id="stop6395" /> + <stop + style="stop-color:#eeeeec;stop-opacity:0;" + offset="1" + id="stop6397" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6393" + id="linearGradient5574" + gradientUnits="userSpaceOnUse" + x1="27.727142" + y1="35" + x2="49" + y2="41.063202" + gradientTransform="translate(-1,0)" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="7" + inkscape:cx="24" + inkscape:cy="24" + inkscape:current-layer="layer1" + showgrid="true" + inkscape:grid-bbox="true" + inkscape:document-units="px" + inkscape:window-width="872" + inkscape:window-height="623" + inkscape:window-x="0" + inkscape:window-y="26" /> + <metadata + id="metadata7200"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title>Network proxy</dc:title> + <dc:date>16.02.2007</dc:date> + <dc:creator> + <cc:Agent> + <dc:title>Josef Vybíral</dc:title> + </cc:Agent> + </dc:creator> + <dc:rights> + <cc:Agent> + <dc:title>Josef Vybíral</dc:title> + </cc:Agent> + </dc:rights> + <dc:source>http://blog.vybiral.info</dc:source> + <dc:subject> + <rdf:Bag> + <rdf:li>network</rdf:li> + <rdf:li>proxy</rdf:li> + </rdf:Bag> + </dc:subject> + <dc:contributor> + <cc:Agent> + <dc:title>Jakub Steiner</dc:title> + </cc:Agent> + </dc:contributor> + <cc:license + rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" /> + </cc:Work> + <cc:License + rdf:about="http://creativecommons.org/licenses/GPL/2.0/"> + <cc:permits + rdf:resource="http://web.resource.org/cc/Reproduction" /> + <cc:permits + rdf:resource="http://web.resource.org/cc/Distribution" /> + <cc:requires + rdf:resource="http://web.resource.org/cc/Notice" /> + <cc:permits + rdf:resource="http://web.resource.org/cc/DerivativeWorks" /> + <cc:requires + rdf:resource="http://web.resource.org/cc/ShareAlike" /> + <cc:requires + rdf:resource="http://web.resource.org/cc/SourceCode" /> + </cc:License> + </rdf:RDF> + </metadata> + <g + id="layer1" + inkscape:label="Layer 1" + inkscape:groupmode="layer"> + <path + style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5538);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + d="M 37.0038,12.5 L 47.0038,12.5" + id="path5472" /> + <path + id="path5474" + d="M 37.0038,12.5 L 47.0038,12.5" + style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5540);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + <rect + ry="0.5064261" + rx="0.5064261" + y="9.5" + x="34.5" + height="6" + width="2.0000012" + id="rect5476" + style="opacity:1;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#3465a4;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + <g + style="opacity:0.31004363;display:inline" + transform="matrix(-1.2388921e-2,0,0,1.6597884e-2,14.35481,26.561532)" + id="g5478"> + <rect + style="opacity:0.40206185;color:#000000;fill:url(#linearGradient5542);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + id="rect5480" + width="1655.6886" + height="478.35718" + x="-1566.019" + y="-150.69685" /> + <path + style="opacity:0.40206185;color:#000000;fill:url(#radialGradient5544);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + d="M 89.669502,-151.55183 C 89.669502,-151.55183 89.669502,326.77896 89.669502,326.77896 C 231.36729,327.67941 432.22584,219.6093 432.22576,87.582782 C 432.22576,-44.443755 274.10167,-151.55181 89.669502,-151.55183 z" + id="path5482" + sodipodi:nodetypes="cccc" /> + <path + sodipodi:nodetypes="cccc" + id="path5484" + d="M -1566.0191,-154.32884 C -1566.0191,-154.32884 -1566.0191,324.00195 -1566.0191,324.00195 C -1707.7169,324.9024 -1908.5753,216.83229 -1908.5753,84.805778 C -1908.5753,-47.220759 -1750.4513,-154.32882 -1566.0191,-154.32884 z" + style="opacity:0.40206185;color:#000000;fill:url(#radialGradient5546);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + </g> + <path + sodipodi:nodetypes="ccc" + id="path5486" + d="M 23.53622,24.5 L 23.53622,35.5 L 30.80771,47.584452" + style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5548);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + <path + style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5550);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + d="M 23.53622,24.5 L 23.53622,35.5 L 42.48548,47.385737" + id="path5488" + sodipodi:nodetypes="ccc" /> + <path + sodipodi:nodetypes="ccc" + id="path5490" + d="M 23.53622,24.5 L 23.53622,34.5 L 47.5,41.5" + style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5552);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + <path + style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5554);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + d="M 23.5,24.5 L 23.5,35.5 L 16.22851,47.584452" + id="path5492" + sodipodi:nodetypes="ccc" /> + <path + sodipodi:nodetypes="ccc" + id="path5494" + d="M 23.5,24.5 L 23.5,35.5 L 4.55074,47.385737" + style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5556);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + <path + sodipodi:nodetypes="ccccccccc" + id="path5496" + d="M 15.09302,2.5000001 L 31.90698,2.5000001 L 34.5,6.2103543 L 34.5,28.313413 C 34.5,28.944378 33.95677,29.500001 33.28198,29.500001 L 13.71802,29.500001 C 13.04323,29.500001 12.5,28.992041 12.5,28.361076 L 12.5,6.2103543 L 15.09302,2.5000001 z" + style="color:#000000;fill:url(#linearGradient5558);fill-opacity:1;fill-rule:evenodd;stroke:#555753;stroke-width:1.00000024px;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + <rect + ry="1" + rx="1" + y="7" + x="15" + height="20" + width="17" + id="rect5498" + style="opacity:0.83842797;color:#000000;fill:url(#linearGradient5560);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + <path + style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000024px;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + d="M 15.53595,3.5 L 31.46767,3.5 L 33.5,6.4892262 L 33.5,27.777117 C 33.5,28.42284 33.44002,28.499987 32.73895,28.499987 L 14.34783,28.499987 C 13.64676,28.499987 13.5,28.51138 13.5,27.865657 L 13.5,6.4892262 L 15.53595,3.5 z" + id="path5500" + sodipodi:nodetypes="ccccccccc" /> + <path + transform="matrix(-1.4831624,0,0,1.5007696,54.7879,-9.838124)" + d="M 23.070641,24.879318 A 1.9989744,1.9989744 0 1 1 19.072692,24.879318 A 1.9989744,1.9989744 0 1 1 23.070641,24.879318 z" + sodipodi:ry="1.9989744" + sodipodi:rx="1.9989744" + sodipodi:cy="24.879318" + sodipodi:cx="21.071667" + id="path5502" + style="color:#000000;fill:#ad7fa8;fill-opacity:1;fill-rule:evenodd;stroke:#5c3566;stroke-width:0.67026824px;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="color:#000000;fill:#ad7fa8;fill-opacity:1;fill-rule:evenodd;stroke:#5c3566;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="path5504" + sodipodi:cx="21.071667" + sodipodi:cy="24.879318" + sodipodi:rx="1.9989744" + sodipodi:ry="1.9989744" + d="M 23.070641,24.879318 A 1.9989744,1.9989744 0 1 1 19.072692,24.879318 A 1.9989744,1.9989744 0 1 1 23.070641,24.879318 z" + transform="matrix(-1,0,0,1,44.60686,3.6196562)" /> + <path + style="fill:none;fill-rule:evenodd;stroke:url(#linearGradient5562);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 23.5,28.5 L 23.5,34.5 L -0.46378,41.5" + id="path5506" + sodipodi:nodetypes="ccc" /> + <path + sodipodi:nodetypes="ccc" + id="path5508" + d="M 23.53622,28.5 L 23.53622,35.5 L 42.45985,47.518214" + style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5564);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + <path + sodipodi:nodetypes="ccc" + id="path5510" + d="M 23.5,28.5 L 23.5,34.5 L -0.46378,41.5" + style="fill:none;fill-rule:evenodd;stroke:url(#linearGradient5566);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" /> + <path + style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5568);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + d="M 23.5,28.5 L 23.5,35.5 L 4.57637,47.518214" + id="path5512" + sodipodi:nodetypes="ccc" /> + <path + style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5570);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + d="M 23.53622,28.5 L 23.53622,35.5 L 30.80771,47.584452" + id="path5514" + sodipodi:nodetypes="ccc" /> + <path + sodipodi:nodetypes="ccc" + id="path5516" + d="M 23.5,28.5 C 23.5,31.25 23.5,35.5 23.5,35.5 L 16.22851,47.584452" + style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5572);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + <path + style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5574);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + d="M 23.53622,28.5 L 23.53622,34.5 L 47.5,41.5" + id="path5518" + sodipodi:nodetypes="ccc" /> + <path + sodipodi:nodetypes="cc" + id="path5520" + d="M 17.5,12.5 L 29.5,12.5" + style="fill:none;fill-rule:evenodd;stroke:#babdb6;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#babdb6;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 17.5,14.5 L 29.5,14.5" + id="path5522" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + id="path5524" + d="M 17.5,16.5 L 29.5,16.5" + style="fill:none;fill-rule:evenodd;stroke:#babdb6;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#babdb6;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 17.5,18.5 L 29.5,18.5" + id="path5526" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 17.5,13.5 L 29.5,13.5" + id="path5528" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + id="path5530" + d="M 17.5,15.5 L 29.5,15.5" + style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 17.5,17.5 L 29.5,17.5" + id="path5532" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + id="path5534" + d="M 17.5,19.5 L 29.5,19.5" + style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + transform="matrix(0.7916045,0,0,0.7916044,2.47836,5.9823878)" + d="M 18.976194,24.655764 A 1.2632571,1.2632571 0 1 1 16.449679,24.655764 A 1.2632571,1.2632571 0 1 1 18.976194,24.655764 z" + sodipodi:ry="1.2632571" + sodipodi:rx="1.2632571" + sodipodi:cy="24.655764" + sodipodi:cx="17.712936" + id="path5536" + style="opacity:0.83842797;color:#000000;fill:#73d216;fill-opacity:1;fill-rule:evenodd;stroke:#4e9a06;stroke-width:1.26325715;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + sodipodi:type="arc" /> + </g> +</svg> diff --git a/capplets/network/mate-network-properties.c b/capplets/network/mate-network-properties.c new file mode 100644 index 00000000..3fcc04dc --- /dev/null +++ b/capplets/network/mate-network-properties.c @@ -0,0 +1,1397 @@ +/* mate-network-properties.c: network preferences capplet + * + * Copyright (C) 2002 Sun Microsystems Inc. + * + * Written by: Mark McLoughlin <[email protected]> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, 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 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. + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stdlib.h> +#include <string.h> +#include <mateconf/mateconf-client.h> +#include <glib/gi18n.h> + +#include "capplet-util.h" +#include "mateconf-property-editor.h" + +enum ProxyMode +{ + PROXYMODE_NONE, + PROXYMODE_MANUAL, + PROXYMODE_AUTO +}; + +static GEnumValue proxytype_values[] = { + { PROXYMODE_NONE, "PROXYMODE_NONE", "none"}, + { PROXYMODE_MANUAL, "PROXYMODE_MANUAL", "manual"}, + { PROXYMODE_AUTO, "PROXYMODE_AUTO", "auto"}, + { 0, NULL, NULL } +}; + +enum { + COL_NAME, + COL_STYLE +}; + +#define USE_PROXY_KEY "/system/http_proxy/use_http_proxy" +#define USE_SAME_PROXY_KEY "/system/http_proxy/use_same_proxy" +#define HTTP_PROXY_HOST_KEY "/system/http_proxy/host" +#define HTTP_PROXY_PORT_KEY "/system/http_proxy/port" +#define HTTP_USE_AUTH_KEY "/system/http_proxy/use_authentication" +#define HTTP_AUTH_USER_KEY "/system/http_proxy/authentication_user" +#define HTTP_AUTH_PASSWD_KEY "/system/http_proxy/authentication_password" +#define IGNORE_HOSTS_KEY "/system/http_proxy/ignore_hosts" +#define PROXY_MODE_KEY "/system/proxy/mode" +#define SECURE_PROXY_HOST_KEY "/system/proxy/secure_host" +#define OLD_SECURE_PROXY_HOST_KEY "/system/proxy/old_secure_host" +#define SECURE_PROXY_PORT_KEY "/system/proxy/secure_port" +#define OLD_SECURE_PROXY_PORT_KEY "/system/proxy/old_secure_port" +#define FTP_PROXY_HOST_KEY "/system/proxy/ftp_host" +#define OLD_FTP_PROXY_HOST_KEY "/system/proxy/old_ftp_host" +#define FTP_PROXY_PORT_KEY "/system/proxy/ftp_port" +#define OLD_FTP_PROXY_PORT_KEY "/system/proxy/old_ftp_port" +#define SOCKS_PROXY_HOST_KEY "/system/proxy/socks_host" +#define OLD_SOCKS_PROXY_HOST_KEY "/system/proxy/old_socks_host" +#define SOCKS_PROXY_PORT_KEY "/system/proxy/socks_port" +#define OLD_SOCKS_PROXY_PORT_KEY "/system/proxy/old_socks_port" +#define PROXY_AUTOCONFIG_URL_KEY "/system/proxy/autoconfig_url" + +#define LOCATION_DIR "/apps/control-center/network" +#define CURRENT_LOCATION "/apps/control-center/network/current_location" + +#define MATECC_GNP_UI_FILE (MATECC_UI_DIR "/mate-network-properties.ui") + +static GtkWidget *details_dialog = NULL; +static GSList *ignore_hosts = NULL; +static GtkTreeModel *model = NULL; + +static GtkTreeModel * +create_listmodel(void) +{ + GtkListStore *store; + + store = gtk_list_store_new(1, G_TYPE_STRING); + + return GTK_TREE_MODEL(store); +} + +static GtkTreeModel * +populate_listmodel(GtkListStore *store, GSList *list) +{ + GtkTreeIter iter; + GSList *pointer; + + gtk_list_store_clear(store); + + pointer = list; + while(pointer) + { + gtk_list_store_append(store, &iter); + gtk_list_store_set(store, &iter, 0, (char *) pointer->data, -1); + pointer = g_slist_next(pointer); + } + + return GTK_TREE_MODEL(store); +} + +static GtkWidget * +config_treeview(GtkTreeView *tree, GtkTreeModel *model) +{ + GtkCellRenderer *renderer; + + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(tree), + -1, "Hosts", renderer, + "text", 0, NULL); + + gtk_tree_view_set_model(GTK_TREE_VIEW(tree), model); + + return GTK_WIDGET(tree); +} + +static GtkWidget* +_gtk_builder_get_widget (GtkBuilder *builder, const gchar *name) +{ + return GTK_WIDGET (gtk_builder_get_object (builder, name)); +} + + +static void +cb_add_url (GtkButton *button, gpointer data) +{ + GtkBuilder *builder = GTK_BUILDER (data); + gchar *new_url = NULL; + MateConfClient *client; + + new_url = g_strdup (gtk_entry_get_text (GTK_ENTRY (gtk_builder_get_object (builder, "entry_url")))); + if (strlen (new_url) == 0) + return; + ignore_hosts = g_slist_append(ignore_hosts, new_url); + populate_listmodel(GTK_LIST_STORE(model), ignore_hosts); + gtk_entry_set_text(GTK_ENTRY (gtk_builder_get_object (builder, + "entry_url")), ""); + + client = mateconf_client_get_default (); + mateconf_client_set_list (client, IGNORE_HOSTS_KEY, MATECONF_VALUE_STRING, ignore_hosts, NULL); + g_object_unref (client); +} + +static void +cb_remove_url (GtkButton *button, gpointer data) +{ + GtkBuilder *builder = GTK_BUILDER (data); + GtkTreeSelection *selection; + GtkTreeIter iter; + MateConfClient *client; + + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_ignore_host"))); + if (gtk_tree_selection_get_selected(selection, &model, &iter)) + { + gchar *url; + GSList *pointer; + + gtk_tree_model_get (model, &iter, 0, &url, -1); + + pointer = ignore_hosts; + while(pointer) + { + if(strcmp(url, (char *) pointer->data) == 0) + { + g_free (pointer->data); + ignore_hosts = g_slist_delete_link(ignore_hosts, pointer); + break; + } + pointer = g_slist_next(pointer); + } + + g_free(url); + populate_listmodel(GTK_LIST_STORE(model), ignore_hosts); + + client = mateconf_client_get_default (); + mateconf_client_set_list(client, IGNORE_HOSTS_KEY, MATECONF_VALUE_STRING, ignore_hosts, NULL); + g_object_unref (client); + } +} + +static void +cb_dialog_response (GtkDialog *dialog, gint response_id) +{ + if (response_id == GTK_RESPONSE_HELP) + capplet_help (GTK_WINDOW (dialog), + "goscustdesk-50"); + else if (response_id == GTK_RESPONSE_CLOSE || response_id == GTK_RESPONSE_DELETE_EVENT) + { + if (ignore_hosts) { + g_slist_foreach (ignore_hosts, (GFunc) g_free, NULL); + g_slist_free (ignore_hosts); + } + + gtk_main_quit (); + } +} + +static void +cb_details_dialog_response (GtkDialog *dialog, gint response_id) +{ + if (response_id == GTK_RESPONSE_HELP) + capplet_help (GTK_WINDOW (dialog), + "goscustdesk-50"); + else { + gtk_widget_destroy (GTK_WIDGET (dialog)); + details_dialog = NULL; + } +} + +static void +cb_use_auth_toggled (GtkToggleButton *toggle, + GtkWidget *table) +{ + gtk_widget_set_sensitive (table, gtk_toggle_button_get_active (toggle)); +} + +static void +cb_http_details_button_clicked (GtkWidget *button, + GtkWidget *parent) +{ + GtkBuilder *builder; + gchar *builder_widgets[] = { "details_dialog", NULL }; + GError *error = NULL; + GtkWidget *widget; + MateConfPropertyEditor *peditor; + + if (details_dialog != NULL) { + gtk_window_present (GTK_WINDOW (details_dialog)); + gtk_widget_grab_focus (details_dialog); + return; + } + + builder = gtk_builder_new (); + if (gtk_builder_add_objects_from_file (builder, MATECC_GNP_UI_FILE, + builder_widgets, &error) == 0) { + g_warning ("Could not load details dialog: %s", error->message); + g_error_free (error); + g_object_unref (builder); + return; + } + + details_dialog = widget = _gtk_builder_get_widget (builder, + "details_dialog"); + + gtk_window_set_transient_for (GTK_WINDOW (widget), GTK_WINDOW (parent)); + + g_signal_connect (gtk_builder_get_object (builder, "use_auth_checkbutton"), + "toggled", + G_CALLBACK (cb_use_auth_toggled), + _gtk_builder_get_widget (builder, "auth_table")); + + peditor = MATECONF_PROPERTY_EDITOR (mateconf_peditor_new_boolean ( + NULL, HTTP_USE_AUTH_KEY, + _gtk_builder_get_widget (builder, "use_auth_checkbutton"), + NULL)); + peditor = MATECONF_PROPERTY_EDITOR (mateconf_peditor_new_string ( + NULL, HTTP_AUTH_USER_KEY, + _gtk_builder_get_widget (builder, "username_entry"), + NULL)); + peditor = MATECONF_PROPERTY_EDITOR (mateconf_peditor_new_string ( + NULL, HTTP_AUTH_PASSWD_KEY, + _gtk_builder_get_widget (builder, "password_entry"), + NULL)); + + g_signal_connect (widget, "response", + G_CALLBACK (cb_details_dialog_response), NULL); + + capplet_set_icon (widget, "mate-network-properties"); + + gtk_widget_show_all (widget); +} + +static gchar * +copy_location_create_key (const gchar *from, const gchar *what) +{ + if (from[0] == '\0') return g_strdup (what); + else return g_strconcat (from, what + strlen ("/system"), NULL); +} + +static void +copy_location (const gchar *from, const gchar *to, MateConfClient *client) +{ + int ti; + gboolean tb; + GSList *tl; + gchar *tstr, *dest, *src; + + if (from[0] != '\0' && !mateconf_client_dir_exists (client, from, NULL)) + return; + + /* USE_PROXY */ + dest = copy_location_create_key (to, USE_PROXY_KEY); + src = copy_location_create_key (from, USE_PROXY_KEY); + + tb = mateconf_client_get_bool (client, src, NULL); + mateconf_client_set_bool (client, dest, tb, NULL); + + g_free (dest); + g_free (src); + + /* USE_SAME_PROXY */ + dest = copy_location_create_key (to, USE_SAME_PROXY_KEY); + src = copy_location_create_key (from, USE_SAME_PROXY_KEY); + + tb = mateconf_client_get_bool (client, src, NULL); + mateconf_client_set_bool (client, dest, tb, NULL); + + g_free (dest); + g_free (src); + + /* HTTP_PROXY_HOST */ + dest = copy_location_create_key (to, HTTP_PROXY_HOST_KEY); + src = copy_location_create_key (from, HTTP_PROXY_HOST_KEY); + + tstr = mateconf_client_get_string (client, src, NULL); + if (tstr != NULL) + { + mateconf_client_set_string (client, dest, tstr, NULL); + g_free (tstr); + } + + g_free (dest); + g_free (src); + + /* HTTP_PROXY_PORT */ + dest = copy_location_create_key (to, HTTP_PROXY_PORT_KEY); + src = copy_location_create_key (from, HTTP_PROXY_PORT_KEY); + + ti = mateconf_client_get_int (client, src, NULL); + mateconf_client_set_int (client, dest, ti, NULL); + + g_free (dest); + g_free (src); + + /* HTTP_USE_AUTH */ + dest = copy_location_create_key (to, HTTP_USE_AUTH_KEY); + src = copy_location_create_key (from, HTTP_USE_AUTH_KEY); + + tb = mateconf_client_get_bool (client, src, NULL); + mateconf_client_set_bool (client, dest, tb, NULL); + + g_free (dest); + g_free (src); + + /* HTTP_AUTH_USER */ + dest = copy_location_create_key (to, HTTP_AUTH_USER_KEY); + src = copy_location_create_key (from, HTTP_AUTH_USER_KEY); + + tstr = mateconf_client_get_string (client, src, NULL); + if (tstr != NULL) + { + mateconf_client_set_string (client, dest, tstr, NULL); + g_free (tstr); + } + + g_free (dest); + g_free (src); + + /* HTTP_AUTH_PASSWD */ + dest = copy_location_create_key (to, HTTP_AUTH_PASSWD_KEY); + src = copy_location_create_key (from, HTTP_AUTH_PASSWD_KEY); + + tstr = mateconf_client_get_string (client, src, NULL); + if (tstr != NULL) + { + mateconf_client_set_string (client, dest, tstr, NULL); + g_free (tstr); + } + + g_free (dest); + g_free (src); + + /* IGNORE_HOSTS */ + dest = copy_location_create_key (to, IGNORE_HOSTS_KEY); + src = copy_location_create_key (from, IGNORE_HOSTS_KEY); + + tl = mateconf_client_get_list (client, src, MATECONF_VALUE_STRING, NULL); + mateconf_client_set_list (client, dest, MATECONF_VALUE_STRING, tl, NULL); + g_slist_foreach (tl, (GFunc) g_free, NULL); + g_slist_free (tl); + + g_free (dest); + g_free (src); + + /* PROXY_MODE */ + dest = copy_location_create_key (to, PROXY_MODE_KEY); + src = copy_location_create_key (from, PROXY_MODE_KEY); + + tstr = mateconf_client_get_string (client, src, NULL); + if (tstr != NULL) + { + mateconf_client_set_string (client, dest, tstr, NULL); + g_free (tstr); + } + + g_free (dest); + g_free (src); + + /* SECURE_PROXY_HOST */ + dest = copy_location_create_key (to, SECURE_PROXY_HOST_KEY); + src = copy_location_create_key (from, SECURE_PROXY_HOST_KEY); + + tstr = mateconf_client_get_string (client, src, NULL); + if (tstr != NULL) + { + mateconf_client_set_string (client, dest, tstr, NULL); + g_free (tstr); + } + + g_free (dest); + g_free (src); + + /* OLD_SECURE_PROXY_HOST */ + dest = copy_location_create_key (to, OLD_SECURE_PROXY_HOST_KEY); + src = copy_location_create_key (from, OLD_SECURE_PROXY_HOST_KEY); + + tstr = mateconf_client_get_string (client, src, NULL); + if (tstr != NULL) + { + mateconf_client_set_string (client, dest, tstr, NULL); + g_free (tstr); + } + + g_free (dest); + g_free (src); + + /* SECURE_PROXY_PORT */ + dest = copy_location_create_key (to, SECURE_PROXY_PORT_KEY); + src = copy_location_create_key (from, SECURE_PROXY_PORT_KEY); + + ti = mateconf_client_get_int (client, src, NULL); + mateconf_client_set_int (client, dest, ti, NULL); + + g_free (dest); + g_free (src); + + /* OLD_SECURE_PROXY_PORT */ + dest = copy_location_create_key (to, OLD_SECURE_PROXY_PORT_KEY); + src = copy_location_create_key (from, OLD_SECURE_PROXY_PORT_KEY); + + ti = mateconf_client_get_int (client, src, NULL); + mateconf_client_set_int (client, dest, ti, NULL); + + g_free (dest); + g_free (src); + + /* FTP_PROXY_HOST */ + dest = copy_location_create_key (to, FTP_PROXY_HOST_KEY); + src = copy_location_create_key (from, FTP_PROXY_HOST_KEY); + + tstr = mateconf_client_get_string (client, src, NULL); + if (tstr != NULL) + { + mateconf_client_set_string (client, dest, tstr, NULL); + g_free (tstr); + } + + g_free (dest); + g_free (src); + + /* OLD_FTP_PROXY_HOST */ + dest = copy_location_create_key (to, OLD_FTP_PROXY_HOST_KEY); + src = copy_location_create_key (from, OLD_FTP_PROXY_HOST_KEY); + + tstr = mateconf_client_get_string (client, src, NULL); + if (tstr != NULL) + { + mateconf_client_set_string (client, dest, tstr, NULL); + g_free (tstr); + } + + g_free (dest); + g_free (src); + + /* FTP_PROXY_PORT */ + dest = copy_location_create_key (to, FTP_PROXY_PORT_KEY); + src = copy_location_create_key (from, FTP_PROXY_PORT_KEY); + + ti = mateconf_client_get_int (client, src, NULL); + mateconf_client_set_int (client, dest, ti, NULL); + + g_free (dest); + g_free (src); + + /* OLD_FTP_PROXY_PORT */ + dest = copy_location_create_key (to, OLD_FTP_PROXY_PORT_KEY); + src = copy_location_create_key (from, OLD_FTP_PROXY_PORT_KEY); + + ti = mateconf_client_get_int (client, src, NULL); + mateconf_client_set_int (client, dest, ti, NULL); + + g_free (dest); + g_free (src); + + /* SOCKS_PROXY_HOST */ + dest = copy_location_create_key (to, SOCKS_PROXY_HOST_KEY); + src = copy_location_create_key (from, SOCKS_PROXY_HOST_KEY); + + tstr = mateconf_client_get_string (client, src, NULL); + if (tstr != NULL) + { + mateconf_client_set_string (client, dest, tstr, NULL); + g_free (tstr); + } + + g_free (dest); + g_free (src); + + /* OLD_SOCKS_PROXY_HOST */ + dest = copy_location_create_key (to, OLD_SOCKS_PROXY_HOST_KEY); + src = copy_location_create_key (from, OLD_SOCKS_PROXY_HOST_KEY); + + tstr = mateconf_client_get_string (client, src, NULL); + if (tstr != NULL) + { + mateconf_client_set_string (client, dest, tstr, NULL); + g_free (tstr); + } + + g_free (dest); + g_free (src); + + /* SOCKS_PROXY_PORT */ + dest = copy_location_create_key (to, SOCKS_PROXY_PORT_KEY); + src = copy_location_create_key (from, SOCKS_PROXY_PORT_KEY); + + ti = mateconf_client_get_int (client, src, NULL); + mateconf_client_set_int (client, dest, ti, NULL); + + g_free (dest); + g_free (src); + + /* OLD_SOCKS_PROXY_PORT */ + dest = copy_location_create_key (to, OLD_SOCKS_PROXY_PORT_KEY); + src = copy_location_create_key (from, OLD_SOCKS_PROXY_PORT_KEY); + + ti = mateconf_client_get_int (client, src, NULL); + mateconf_client_set_int (client, dest, ti, NULL); + + g_free (dest); + g_free (src); + + /* PROXY_AUTOCONFIG_URL */ + dest = copy_location_create_key (to, PROXY_AUTOCONFIG_URL_KEY); + src = copy_location_create_key (from, PROXY_AUTOCONFIG_URL_KEY); + + tstr = mateconf_client_get_string (client, src, NULL); + if (tstr != NULL) + { + mateconf_client_set_string (client, dest, tstr, NULL); + g_free (tstr); + } + + g_free (dest); + g_free (src); +} + +static gchar * +get_current_location (MateConfClient *client) +{ + gchar *result; + + result = mateconf_client_get_string (client, CURRENT_LOCATION, NULL); + + if (result == NULL || result[0] == '\0') + { + g_free (result); + result = g_strdup (_("Default")); + } + + return result; +} + +static gboolean +location_combo_separator (GtkTreeModel *model, + GtkTreeIter *iter, + gpointer data) +{ + gchar *name; + gboolean ret; + + gtk_tree_model_get (model, iter, COL_NAME, &name, -1); + + ret = name == NULL || name[0] == '\0'; + + g_free (name); + + return ret; +} + +static void +update_locations (MateConfClient *client, + GtkBuilder *builder); + +static void +cb_location_changed (GtkWidget *location, + GtkBuilder *builder); + +static void +cb_current_location (MateConfClient *client, + guint cnxn_id, + MateConfEntry *entry, + GtkBuilder *builder) +{ + MateConfValue *value; + const gchar *newval; + + value = mateconf_entry_get_value (entry); + if (value == NULL) + return; + + newval = mateconf_value_get_string (value); + if (newval == NULL) + return; + + /* prevent the current settings from being saved by blocking + * the signal handler */ + g_signal_handlers_block_by_func (gtk_builder_get_object (builder, "location_combobox"), + cb_location_changed, builder); + update_locations (client, builder); + g_signal_handlers_unblock_by_func (gtk_builder_get_object (builder, "location_combobox"), + cb_location_changed, builder); +} + +static void +update_locations (MateConfClient *client, + GtkBuilder *builder) +{ + int i, select; + gchar *current; + GtkComboBox *location = GTK_COMBO_BOX (gtk_builder_get_object (builder, "location_combobox")); + GSList *list = mateconf_client_all_dirs (client, LOCATION_DIR, NULL); + GtkTreeIter titer; + GtkListStore *store; + GSList *iter, *last; + + store = GTK_LIST_STORE (gtk_combo_box_get_model (location)); + gtk_list_store_clear (store); + + current = get_current_location (client); + + list = g_slist_append (list, g_strconcat (LOCATION_DIR"/", current, NULL)); + list = g_slist_sort (list, (GCompareFunc) strcmp); + + select = -1; + + for (i = 0, iter = list, last = NULL; iter != NULL; last = iter, iter = g_slist_next (iter), ++i) + { + if (last == NULL || strcmp (last->data, iter->data) != 0) + { + gchar *locp, *key_name; + + locp = iter->data + strlen (LOCATION_DIR) + 1; + key_name = mateconf_unescape_key (locp, -1); + + gtk_list_store_append (store, &titer); + gtk_list_store_set (store, &titer, + COL_NAME, key_name, + COL_STYLE, PANGO_STYLE_NORMAL, -1); + + g_free (key_name); + + if (strcmp (locp, current) == 0) + select = i; + } + } + if (select == -1) + { + gtk_list_store_append (store, &titer); + gtk_list_store_set (store, &titer, + COL_NAME , current, + COL_STYLE, PANGO_STYLE_NORMAL, -1); + select = i++; + } + gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, + "delete_button"), + i > 1); + + gtk_list_store_append (store, &titer); + gtk_list_store_set (store, &titer, + COL_NAME, NULL, + COL_STYLE, PANGO_STYLE_NORMAL, -1); + + gtk_list_store_append (store, &titer); + gtk_list_store_set (store, &titer, + COL_NAME, _("New Location..."), + COL_STYLE, PANGO_STYLE_ITALIC, -1); + + gtk_combo_box_set_row_separator_func (location, location_combo_separator, NULL, NULL); + gtk_combo_box_set_active (location, select); + g_free (current); + g_slist_foreach (list, (GFunc) mateconf_entry_free, NULL); + g_slist_free (list); +} + +static void +cb_location_new_text_changed (GtkEntry *entry, GtkBuilder *builder) +{ + gboolean exists; + gchar *current, *esc, *key; + const gchar *name; + MateConfClient *client; + + client = mateconf_client_get_default (); + + name = gtk_entry_get_text (entry); + if (name != NULL && name[0] != '\0') + { + esc = mateconf_escape_key (name, -1); + + key = g_strconcat (LOCATION_DIR "/", esc, NULL); + g_free (esc); + + current = get_current_location (client); + + exists = (strcmp (current, name) == 0) || + mateconf_client_dir_exists (client, key, NULL); + g_free (key); + } else exists = FALSE; + + g_object_unref (client); + + if (exists) + gtk_widget_show (_gtk_builder_get_widget (builder, + "error_label")); + else + gtk_widget_hide (_gtk_builder_get_widget (builder, + "error_label")); + + gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, + "new_location"), + !exists); +} + +static void +location_new (GtkBuilder *capplet_builder, GtkWidget *parent) +{ + GtkBuilder *builder; + GError *error = NULL; + gchar *builder_widgets[] = { "location_new_dialog", + "new_location_btn_img", NULL }; + GtkWidget *askdialog; + const gchar *name; + int response; + MateConfClient *client; + + client = mateconf_client_get_default (); + + builder = gtk_builder_new (); + if (gtk_builder_add_objects_from_file (builder, MATECC_GNP_UI_FILE, + builder_widgets, &error) == 0) { + g_warning ("Could not load location dialog: %s", + error->message); + g_error_free (error); + g_object_unref (builder); + return; + } + + askdialog = _gtk_builder_get_widget (builder, "location_new_dialog"); + gtk_window_set_transient_for (GTK_WINDOW (askdialog), GTK_WINDOW (parent)); + g_signal_connect (askdialog, "response", + G_CALLBACK (gtk_widget_hide), NULL); + g_signal_connect (gtk_builder_get_object (builder, "text"), "changed", + G_CALLBACK (cb_location_new_text_changed), builder); + response = gtk_dialog_run (GTK_DIALOG (askdialog)); + name = gtk_entry_get_text (GTK_ENTRY (gtk_builder_get_object (builder, "text"))); + g_object_unref (builder); + + if (response == GTK_RESPONSE_OK && name[0] != '\0') + { + gboolean exists; + gchar *current, *esc, *key; + esc = mateconf_escape_key (name, -1); + key = g_strconcat (LOCATION_DIR "/", esc, NULL); + g_free (esc); + + current = get_current_location (client); + + exists = (strcmp (current, name) == 0) || + mateconf_client_dir_exists (client, key, NULL); + + g_free (key); + + if (!exists) + { + esc = mateconf_escape_key (current, -1); + g_free (current); + key = g_strconcat (LOCATION_DIR "/", esc, NULL); + g_free (esc); + + copy_location ("", key, client); + g_free (key); + + mateconf_client_set_string (client, CURRENT_LOCATION, name, NULL); + update_locations (client, capplet_builder); + } + else + { + GtkWidget *err = gtk_message_dialog_new (GTK_WINDOW (askdialog), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, + _("Location already exists")); + gtk_dialog_run (GTK_DIALOG (err)); + gtk_widget_destroy (err); + + /* switch back to the currently selected location */ + mateconf_client_notify (client, CURRENT_LOCATION); + } + } + else + { + /* switch back to the currently selected location */ + mateconf_client_notify (client, CURRENT_LOCATION); + } + gtk_widget_destroy (askdialog); + g_object_unref (client); +} + +static void +cb_location_changed (GtkWidget *location, + GtkBuilder *builder) +{ + gchar *current; + gchar *name = gtk_combo_box_get_active_text (GTK_COMBO_BOX (location)); + MateConfClient *client; + + if (name == NULL) + return; + + client = mateconf_client_get_default (); + + current = get_current_location (client); + + if (strcmp (current, name) != 0) + { + if (strcmp (name, _("New Location...")) == 0) + { + location_new (builder, _gtk_builder_get_widget (builder, "network_dialog")); + } + else + { + gchar *key, *esc; + + /* save current settings */ + esc = mateconf_escape_key (current, -1); + key = g_strconcat (LOCATION_DIR "/", esc, NULL); + g_free (esc); + + copy_location ("", key, client); + g_free (key); + + /* load settings */ + esc = mateconf_escape_key (name, -1); + key = g_strconcat (LOCATION_DIR "/", esc, NULL); + g_free (esc); + + copy_location (key, "", client); + mateconf_client_recursive_unset (client, key, + MATECONF_UNSET_INCLUDING_SCHEMA_NAMES, NULL); + g_free (key); + + mateconf_client_set_string (client, CURRENT_LOCATION, name, NULL); + } + } + + g_free (current); + g_free (name); + g_object_unref (client); +} + +static void +cb_delete_button_clicked (GtkWidget *button, + GtkBuilder *builder) +{ + MateConfClient *client; + GtkComboBox *box = GTK_COMBO_BOX (gtk_builder_get_object (builder, + "location_combobox")); + int active = gtk_combo_box_get_active (box); + gchar *current, *key, *esc; + + /* prevent the current settings from being saved by blocking + * the signal handler */ + g_signal_handlers_block_by_func (box, cb_location_changed, builder); + gtk_combo_box_set_active (box, (active == 0) ? 1 : 0); + gtk_combo_box_remove_text (box, active); + g_signal_handlers_unblock_by_func (box, cb_location_changed, builder); + + /* set the new location */ + client = mateconf_client_get_default (); + current = gtk_combo_box_get_active_text (box); + + esc = mateconf_escape_key (current, -1); + key = g_strconcat (LOCATION_DIR "/", esc, NULL); + g_free (esc); + + copy_location (key, "", client); + mateconf_client_recursive_unset (client, key, + MATECONF_UNSET_INCLUDING_SCHEMA_NAMES, NULL); + mateconf_client_suggest_sync (client, NULL); + g_free (key); + + mateconf_client_set_string (client, CURRENT_LOCATION, current, NULL); + + g_free (current); + + g_object_unref (client); +} + +/* When using the same proxy for all protocols, updates every host_entry + * as the user types along */ +static void +synchronize_hosts (GtkEntry *widget, + GtkBuilder *builder) +{ + const gchar *hosts[] = { + "secure_host_entry", + "ftp_host_entry", + "socks_host_entry", + NULL }; + const gchar **host, *http_host; + + http_host = gtk_entry_get_text (widget); + + for (host = hosts; *host != NULL; ++host) + { + widget = GTK_ENTRY (gtk_builder_get_object (builder, *host)); + gtk_entry_set_text (widget, http_host); + } +} + +/* When using the same proxy for all protocols, copies the value of the + * http port to the other spinbuttons */ +static void +synchronize_ports (GtkSpinButton *widget, + GtkBuilder *builder) +{ + const gchar *ports[] = { + "secure_port_spinbutton", + "ftp_port_spinbutton", + "socks_port_spinbutton", + NULL }; + gdouble http_port; + const gchar **port; + + http_port = gtk_spin_button_get_value (widget); + + for (port = ports; *port != NULL; ++port) + { + widget = GTK_SPIN_BUTTON ( + gtk_builder_get_object (builder, *port)); + gtk_spin_button_set_value (widget, http_port); + } +} + +/* Synchronizes all hosts and ports */ +static void +synchronize_entries (GtkBuilder *builder) +{ + g_signal_connect ( + gtk_builder_get_object (builder, "http_host_entry"), + "changed", + G_CALLBACK (synchronize_hosts), + builder); + g_signal_connect ( + gtk_builder_get_object (builder, "http_port_spinbutton"), + "value-changed", + G_CALLBACK (synchronize_ports), + builder); +} + +/* Unsynchronize hosts and ports */ +static void +unsynchronize_entries (GtkBuilder *builder) +{ + g_signal_handlers_disconnect_by_func ( + gtk_builder_get_object (builder, "http_host_entry"), + synchronize_hosts, + builder); + g_signal_handlers_disconnect_by_func ( + gtk_builder_get_object (builder, "http_port_spinbutton"), + synchronize_ports, + builder); +} + +static void +cb_use_same_proxy_checkbutton_clicked (GtkWidget *checkbutton, + GtkBuilder *builder) +{ + MateConfClient *client; + gboolean same_proxy; + gchar *http_proxy; + gint http_port; + gchar *host; + + client = mateconf_client_get_default (); + same_proxy = mateconf_client_get_bool (client, USE_SAME_PROXY_KEY, NULL); + + http_proxy = mateconf_client_get_string (client, HTTP_PROXY_HOST_KEY, NULL); + http_port = mateconf_client_get_int (client, HTTP_PROXY_PORT_KEY, NULL); + + if (same_proxy) + { + /* Save the old values */ + host = mateconf_client_get_string (client, SECURE_PROXY_HOST_KEY, NULL); + mateconf_client_set_string (client, OLD_SECURE_PROXY_HOST_KEY, host, NULL); + mateconf_client_set_int (client, OLD_SECURE_PROXY_PORT_KEY, + mateconf_client_get_int (client, SECURE_PROXY_PORT_KEY, NULL), NULL); + g_free (host); + + host = mateconf_client_get_string (client, FTP_PROXY_HOST_KEY, NULL); + mateconf_client_set_string (client, OLD_FTP_PROXY_HOST_KEY, host, NULL); + mateconf_client_set_int (client, OLD_FTP_PROXY_PORT_KEY, + mateconf_client_get_int (client, FTP_PROXY_PORT_KEY, NULL), NULL); + g_free (host); + + host = mateconf_client_get_string (client, SOCKS_PROXY_HOST_KEY, NULL); + mateconf_client_set_string (client, OLD_SOCKS_PROXY_HOST_KEY, host, NULL); + mateconf_client_set_int (client, OLD_SOCKS_PROXY_PORT_KEY, + mateconf_client_get_int (client, SOCKS_PROXY_PORT_KEY, NULL), NULL); + g_free (host); + + /* Set the new values */ + mateconf_client_set_string (client, SECURE_PROXY_HOST_KEY, http_proxy, NULL); + mateconf_client_set_int (client, SECURE_PROXY_PORT_KEY, http_port, NULL); + + mateconf_client_set_string (client, FTP_PROXY_HOST_KEY, http_proxy, NULL); + mateconf_client_set_int (client, FTP_PROXY_PORT_KEY, http_port, NULL); + + mateconf_client_set_string (client, SOCKS_PROXY_HOST_KEY, http_proxy, NULL); + mateconf_client_set_int (client, SOCKS_PROXY_PORT_KEY, http_port, NULL); + + /* Synchronize entries */ + synchronize_entries (builder); + } + else + { + host = mateconf_client_get_string (client, OLD_SECURE_PROXY_HOST_KEY, NULL); + mateconf_client_set_string (client, SECURE_PROXY_HOST_KEY, host, NULL); + mateconf_client_set_int (client, SECURE_PROXY_PORT_KEY, + mateconf_client_get_int (client, OLD_SECURE_PROXY_PORT_KEY, NULL), NULL); + g_free (host); + + host = mateconf_client_get_string (client, OLD_FTP_PROXY_HOST_KEY, NULL); + mateconf_client_set_string (client, FTP_PROXY_HOST_KEY, host, NULL); + mateconf_client_set_int (client, FTP_PROXY_PORT_KEY, + mateconf_client_get_int (client, OLD_FTP_PROXY_PORT_KEY, NULL), NULL); + g_free (host); + + host = mateconf_client_get_string (client, OLD_SOCKS_PROXY_HOST_KEY, NULL); + mateconf_client_set_string (client, SOCKS_PROXY_HOST_KEY, host, NULL); + mateconf_client_set_int (client, SOCKS_PROXY_PORT_KEY, + mateconf_client_get_int (client, OLD_SOCKS_PROXY_PORT_KEY, NULL), NULL); + g_free (host); + + /* Hosts and ports should not be synchronized any more */ + unsynchronize_entries (builder); + } + + /* Set the proxy entries insensitive if we are using the same proxy for all */ + gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, + "secure_host_entry"), + !same_proxy); + gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, + "secure_port_spinbutton"), + !same_proxy); + gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, + "ftp_host_entry"), + !same_proxy); + gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, + "ftp_port_spinbutton"), + !same_proxy); + gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, + "socks_host_entry"), + !same_proxy); + gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, + "socks_port_spinbutton"), + !same_proxy); + + g_object_unref (client); +} + +static gchar * +get_hostname_from_uri (const gchar *uri) +{ + const gchar *start, *end; + gchar *host; + + if (uri == NULL) + return NULL; + + /* skip the scheme part */ + start = strchr (uri, ':'); + if (start == NULL) + return NULL; + + /* forward until after the last '/' */ + do { + ++start; + } while (*start == '/'); + + if (*start == '\0') + return NULL; + + /* maybe we have a port? */ + end = strchr (start, ':'); + if (end == NULL) + end = strchr (start, '/'); + + if (end != NULL) + host = g_strndup (start, end - start); + else + host = g_strdup (start); + + return host; +} + +static MateConfValue * +extract_proxy_host (MateConfPropertyEditor *peditor, const MateConfValue *orig) +{ + char const *entered_text = mateconf_value_get_string (orig); + MateConfValue *res = NULL; + + if (entered_text != NULL) { + gchar *host = get_hostname_from_uri (entered_text); + + if (host != NULL) { + res = mateconf_value_new (MATECONF_VALUE_STRING); + mateconf_value_set_string (res, host); + g_free (host); + } + } + + return (res != NULL) ? res : mateconf_value_copy (orig); +} + +static void +proxy_mode_radiobutton_clicked_cb (GtkWidget *widget, + GtkBuilder *builder) +{ + GSList *mode_group; + int mode; + MateConfClient *client; + + if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget))) + return; + + mode_group = g_slist_copy (gtk_radio_button_get_group + (GTK_RADIO_BUTTON (gtk_builder_get_object (builder, "none_radiobutton")))); + mode_group = g_slist_reverse (mode_group); + mode = g_slist_index (mode_group, widget); + g_slist_free (mode_group); + + gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, "manual_box"), + mode == PROXYMODE_MANUAL); + gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, "same_proxy_checkbutton"), + mode == PROXYMODE_MANUAL); + gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, "auto_box"), + mode == PROXYMODE_AUTO); + client = mateconf_client_get_default (); + mateconf_client_set_bool (client, USE_PROXY_KEY, + mode == PROXYMODE_AUTO || mode == PROXYMODE_MANUAL, NULL); + g_object_unref (client); +} + +static void +connect_sensitivity_signals (GtkBuilder *builder, GSList *mode_group) +{ + for (; mode_group != NULL; mode_group = mode_group->next) + { + g_signal_connect (G_OBJECT (mode_group->data), "clicked", + G_CALLBACK(proxy_mode_radiobutton_clicked_cb), + builder); + } +} + +static void +cb_ignore_hosts_mateconf_changed (MateConfClient *client, guint cnxn_id, + MateConfEntry *entry, gpointer user_data) +{ + g_slist_foreach (ignore_hosts, (GFunc) g_free, NULL); + g_slist_free (ignore_hosts); + + ignore_hosts = mateconf_client_get_list (client, IGNORE_HOSTS_KEY, + MATECONF_VALUE_STRING, NULL); + + populate_listmodel (GTK_LIST_STORE (model), ignore_hosts); +} + +static void +setup_dialog (GtkBuilder *builder) +{ + MateConfPropertyEditor *peditor; + GSList *mode_group; + GType mode_type = 0; + MateConfClient *client; + gint port_value; + GtkWidget *location_box, *same_proxy_toggle; + GtkCellRenderer *location_renderer; + GtkListStore *store; + + mode_type = g_enum_register_static ("NetworkPreferencesProxyType", + proxytype_values); + + client = mateconf_client_get_default (); + + /* Locations */ + location_box = _gtk_builder_get_widget (builder, "location_combobox"); + store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT); + gtk_combo_box_set_model (GTK_COMBO_BOX (location_box), GTK_TREE_MODEL (store)); + + update_locations (client, builder); + mateconf_client_add_dir (client, LOCATION_DIR, MATECONF_CLIENT_PRELOAD_ONELEVEL, NULL); + mateconf_client_notify_add (client, CURRENT_LOCATION, (MateConfClientNotifyFunc) cb_current_location, builder, NULL, NULL); + + mateconf_client_notify_add (client, IGNORE_HOSTS_KEY, cb_ignore_hosts_mateconf_changed, NULL, NULL, NULL); + + g_signal_connect (location_box, "changed", G_CALLBACK (cb_location_changed), builder); + g_signal_connect (gtk_builder_get_object (builder, "delete_button"), "clicked", G_CALLBACK (cb_delete_button_clicked), builder); + + location_renderer = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (location_box), location_renderer, TRUE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (location_box), + location_renderer, + "text", COL_NAME, + "style", COL_STYLE, NULL); + + /* Mode */ + mode_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (gtk_builder_get_object (builder, "none_radiobutton"))); + connect_sensitivity_signals (builder, mode_group); + + peditor = MATECONF_PROPERTY_EDITOR (mateconf_peditor_new_select_radio_with_enum (NULL, + PROXY_MODE_KEY, mode_group, mode_type, + TRUE, NULL)); + + /* Use same proxy for all protocols */ + same_proxy_toggle = _gtk_builder_get_widget (builder, "same_proxy_checkbutton"); + peditor = MATECONF_PROPERTY_EDITOR (mateconf_peditor_new_boolean (NULL, + USE_SAME_PROXY_KEY, same_proxy_toggle, NULL)); + + g_signal_connect (same_proxy_toggle, + "toggled", + G_CALLBACK (cb_use_same_proxy_checkbutton_clicked), + builder); + + /* Http */ + port_value = mateconf_client_get_int (client, HTTP_PROXY_PORT_KEY, NULL); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "http_port_spinbutton")), (gdouble) port_value); + peditor = MATECONF_PROPERTY_EDITOR (mateconf_peditor_new_string ( + NULL, HTTP_PROXY_HOST_KEY, _gtk_builder_get_widget (builder, "http_host_entry"), + "conv-from-widget-cb", extract_proxy_host, + NULL)); + peditor = MATECONF_PROPERTY_EDITOR (mateconf_peditor_new_integer ( + NULL, HTTP_PROXY_PORT_KEY, + _gtk_builder_get_widget (builder, "http_port_spinbutton"), + NULL)); + g_signal_connect (gtk_builder_get_object (builder, "details_button"), + "clicked", + G_CALLBACK (cb_http_details_button_clicked), + _gtk_builder_get_widget (builder, "network_dialog")); + + /* Secure */ + port_value = mateconf_client_get_int (client, SECURE_PROXY_PORT_KEY, NULL); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "secure_port_spinbutton")), (gdouble) port_value); + peditor = MATECONF_PROPERTY_EDITOR (mateconf_peditor_new_string ( + NULL, SECURE_PROXY_HOST_KEY, + _gtk_builder_get_widget (builder, "secure_host_entry"), + "conv-from-widget-cb", extract_proxy_host, + NULL)); + peditor = MATECONF_PROPERTY_EDITOR (mateconf_peditor_new_integer ( + NULL, SECURE_PROXY_PORT_KEY, + _gtk_builder_get_widget (builder, "secure_port_spinbutton"), + NULL)); + + /* Ftp */ + port_value = mateconf_client_get_int (client, FTP_PROXY_PORT_KEY, NULL); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "ftp_port_spinbutton")), (gdouble) port_value); + peditor = MATECONF_PROPERTY_EDITOR (mateconf_peditor_new_string ( + NULL, FTP_PROXY_HOST_KEY, + _gtk_builder_get_widget (builder, "ftp_host_entry"), + "conv-from-widget-cb", extract_proxy_host, + NULL)); + peditor = MATECONF_PROPERTY_EDITOR (mateconf_peditor_new_integer ( + NULL, FTP_PROXY_PORT_KEY, + _gtk_builder_get_widget (builder, "ftp_port_spinbutton"), + NULL)); + + /* Socks */ + port_value = mateconf_client_get_int (client, SOCKS_PROXY_PORT_KEY, NULL); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "socks_port_spinbutton")), (gdouble) port_value); + peditor = MATECONF_PROPERTY_EDITOR (mateconf_peditor_new_string ( + NULL, SOCKS_PROXY_HOST_KEY, + _gtk_builder_get_widget (builder, "socks_host_entry"), + "conv-from-widget-cb", extract_proxy_host, + NULL)); + peditor = MATECONF_PROPERTY_EDITOR (mateconf_peditor_new_integer ( + NULL, SOCKS_PROXY_PORT_KEY, + _gtk_builder_get_widget (builder, "socks_port_spinbutton"), + NULL)); + + /* Set the proxy entries insensitive if we are using the same proxy for all, + and make sure they are all synchronized */ + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (same_proxy_toggle))) + { + gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, "secure_host_entry"), FALSE); + gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, "secure_port_spinbutton"), FALSE); + gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, "ftp_host_entry"), FALSE); + gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, "ftp_port_spinbutton"), FALSE); + gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, "socks_host_entry"), FALSE); + gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, "socks_port_spinbutton"), FALSE); + + synchronize_entries (builder); + } + + /* Autoconfiguration */ + peditor = MATECONF_PROPERTY_EDITOR (mateconf_peditor_new_string ( + NULL, PROXY_AUTOCONFIG_URL_KEY, + _gtk_builder_get_widget (builder, "autoconfig_entry"), + NULL)); + + g_signal_connect (gtk_builder_get_object (builder, "network_dialog"), + "response", G_CALLBACK (cb_dialog_response), NULL); + + + ignore_hosts = mateconf_client_get_list(client, IGNORE_HOSTS_KEY, MATECONF_VALUE_STRING, NULL); + g_object_unref (client); + + model = create_listmodel(); + populate_listmodel(GTK_LIST_STORE(model), ignore_hosts); + config_treeview(GTK_TREE_VIEW(gtk_builder_get_object (builder, "treeview_ignore_host")), model); + + g_signal_connect (gtk_builder_get_object (builder, "button_add_url"), + "clicked", G_CALLBACK (cb_add_url), builder); + g_signal_connect (gtk_builder_get_object (builder, "entry_url"), + "activate", G_CALLBACK (cb_add_url), builder); + g_signal_connect (gtk_builder_get_object (builder, "button_remove_url"), + "clicked", G_CALLBACK (cb_remove_url), builder); +} + +int +main (int argc, char **argv) +{ + GtkBuilder *builder; + GError *error = NULL; + gchar *builder_widgets[] = {"network_dialog", "adjustment1", + "adjustment2", "adjustment3", "adjustment4", + "delete_button_img", NULL}; + MateConfClient *client; + GtkWidget *widget; + + bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR); + bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); + textdomain (GETTEXT_PACKAGE); + + gtk_init (&argc, &argv); + + client = mateconf_client_get_default (); + mateconf_client_add_dir (client, "/system/http_proxy", + MATECONF_CLIENT_PRELOAD_ONELEVEL, NULL); + mateconf_client_add_dir (client, "/system/proxy", + MATECONF_CLIENT_PRELOAD_ONELEVEL, NULL); + + builder = gtk_builder_new (); + if (gtk_builder_add_objects_from_file (builder, MATECC_GNP_UI_FILE, + builder_widgets, &error) == 0) { + g_warning ("Could not load main dialog: %s", + error->message); + g_error_free (error); + g_object_unref (builder); + g_object_unref (client); + return (EXIT_FAILURE); + } + + setup_dialog (builder); + widget = _gtk_builder_get_widget (builder, "network_dialog"); + capplet_set_icon (widget, "mate-network-properties"); + gtk_widget_show_all (widget); + gtk_main (); + + g_object_unref (builder); + g_object_unref (client); + + return 0; +} diff --git a/capplets/network/mate-network-properties.desktop.in.in b/capplets/network/mate-network-properties.desktop.in.in new file mode 100644 index 00000000..e16b3d09 --- /dev/null +++ b/capplets/network/mate-network-properties.desktop.in.in @@ -0,0 +1,14 @@ +[Desktop Entry] +_Name=Network Proxy +_Comment=Set your network proxy preferences +Exec=mate-network-properties +Icon=mate-network-properties +Terminal=false +Type=Application +StartupNotify=true +Categories=MATE;GTK;Settings;X-MATE-NetworkSettings; +OnlyShowIn=MATE; +X-MATE-Bugzilla-Bugzilla=MATE +X-MATE-Bugzilla-Product=mate-control-center +X-MATE-Bugzilla-Component=network preferences +X-MATE-Bugzilla-Version=@VERSION@ diff --git a/capplets/network/mate-network-properties.ui b/capplets/network/mate-network-properties.ui new file mode 100644 index 00000000..29c3c3e1 --- /dev/null +++ b/capplets/network/mate-network-properties.ui @@ -0,0 +1,1056 @@ +<?xml version="1.0"?> +<interface> + <requires lib="gtk+" version="2.16"/> + <!-- interface-naming-policy toplevel-contextual --> + <object class="GtkDialog" id="network_dialog"> + <property name="border_width">5</property> + <property name="title" translatable="yes">Network Proxy Preferences</property> + <property name="resizable">False</property> + <property name="type_hint">dialog</property> + <property name="has_separator">False</property> + <child internal-child="vbox"> + <object class="GtkVBox" id="dialog-vbox1"> + <property name="visible">True</property> + <property name="spacing">2</property> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="xscale">0</property> + <child> + <object class="GtkHBox" id="hbox2"> + <property name="visible">True</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">Location:</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="location_combobox"> + <property name="visible">True</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkNotebook" id="notebook1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="border_width">5</property> + <child> + <object class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="border_width">12</property> + <property name="spacing">18</property> + <child> + <object class="GtkRadioButton" id="none_radiobutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + <child> + <object class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Di_rect internet connection</b></property> + <property name="use_markup">True</property> + <property name="use_underline">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="no_direct_vbox"> + <property name="visible">True</property> + <property name="spacing">18</property> + <child> + <object class="GtkVBox" id="manual_vbox"> + <property name="visible">True</property> + <property name="spacing">6</property> + <child> + <object class="GtkRadioButton" id="manual_radiobutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + <property name="group">none_radiobutton</property> + <child> + <object class="GtkLabel" id="label3"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>_Manual proxy configuration</b></property> + <property name="use_markup">True</property> + <property name="use_underline">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="same_proxy_checkbutton"> + <property name="label" translatable="yes">_Use the same proxy for all protocols</property> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="manual_box"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <child> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="label"> </property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkTable" id="manual_table"> + <property name="visible">True</property> + <property name="n_rows">4</property> + <property name="n_columns">5</property> + <property name="column_spacing">12</property> + <property name="row_spacing">6</property> + <child> + <object class="GtkLabel" id="label6"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">H_TTP proxy:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">http_host_entry</property> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label7"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">_Secure HTTP proxy:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">secure_host_entry</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label8"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">_FTP proxy:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">ftp_host_entry</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label9"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">S_ocks host:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">socks_host_entry</property> + </object> + <packing> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkEntry" id="http_host_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkEntry" id="secure_host_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkEntry" id="ftp_host_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkEntry" id="socks_host_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label10"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Port:</property> + <accessibility> + <relation type="label-for" target="http_port_spinbutton"/> + </accessibility> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label11"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Port:</property> + <accessibility> + <relation type="label-for" target="secure_port_spinbutton"/> + </accessibility> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label12"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Port:</property> + <accessibility> + <relation type="label-for" target="ftp_port_spinbutton"/> + </accessibility> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label13"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Port:</property> + <accessibility> + <relation type="label-for" target="socks_port_spinbutton"/> + </accessibility> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="http_port_spinbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="adjustment">adjustment4</property> + <property name="climb_rate">1</property> + <accessibility> + <relation type="labelled-by" target="label10"/> + </accessibility> + </object> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="secure_port_spinbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="adjustment">adjustment3</property> + <property name="climb_rate">1</property> + <accessibility> + <relation type="labelled-by" target="label11"/> + </accessibility> + </object> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="ftp_port_spinbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="adjustment">adjustment2</property> + <property name="climb_rate">1</property> + <accessibility> + <relation type="labelled-by" target="label12"/> + </accessibility> + </object> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="socks_port_spinbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="adjustment">adjustment1</property> + <property name="climb_rate">1</property> + <accessibility> + <relation type="labelled-by" target="label13"/> + </accessibility> + </object> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkButton" id="details_button"> + <property name="label" translatable="yes">_Details</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + </object> + <packing> + <property name="left_attach">4</property> + <property name="right_attach">5</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vbox2"> + <property name="visible">True</property> + <property name="spacing">6</property> + <child> + <object class="GtkRadioButton" id="auto_radiobutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="yalign">0.47</property> + <property name="draw_indicator">True</property> + <property name="group">none_radiobutton</property> + <child> + <object class="GtkLabel" id="label5"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>_Automatic proxy configuration</b></property> + <property name="use_markup">True</property> + <property name="use_underline">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox1"> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="label17"> + <property name="visible">True</property> + <property name="label"> </property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="auto_box"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="spacing">12</property> + <child> + <object class="GtkLabel" id="label18"> + <property name="visible">True</property> + <property name="label" translatable="yes">Autoconfiguration _URL:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">autoconfig_entry</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="autoconfig_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="label20"> + <property name="visible">True</property> + <property name="label" translatable="yes">Proxy Configuration</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vbox4"> + <property name="visible">True</property> + <property name="border_width">12</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label_ignore_host"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Ignore Host List</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox4"> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="label22"> + <property name="visible">True</property> + <property name="label"> </property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkTable" id="table1"> + <property name="visible">True</property> + <property name="n_rows">2</property> + <property name="n_columns">2</property> + <property name="column_spacing">12</property> + <property name="row_spacing">6</property> + <child> + <object class="GtkEntry" id="entry_url"> + <property name="visible">True</property> + <property name="can_focus">True</property> + </object> + <packing> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkButton" id="button_add_url"> + <property name="label">gtk-add</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">automatic</property> + <property name="vscrollbar_policy">automatic</property> + <property name="shadow_type">in</property> + <child> + <object class="GtkTreeView" id="treeview_ignore_host"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="headers_visible">False</property> + </object> + </child> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment2"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="yscale">0</property> + <child> + <object class="GtkHBox" id="hbox3"> + <property name="visible">True</property> + <child> + <object class="GtkButton" id="button_remove_url"> + <property name="label">gtk-remove</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + </object> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="label21"> + <property name="visible">True</property> + <property name="label" translatable="yes">Ignored Hosts</property> + </object> + <packing> + <property name="position">1</property> + <property name="tab_fill">False</property> + </packing> + </child> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child internal-child="action_area"> + <object class="GtkHButtonBox" id="dialog-action_area1"> + <property name="visible">True</property> + <property name="layout_style">end</property> + <child> + <object class="GtkButton" id="helpbutton1"> + <property name="label">gtk-help</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">False</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="delete_button"> + <property name="label" translatable="yes">_Delete Location</property> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="image">delete_button_img</property> + <property name="use_underline">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="closebutton1"> + <property name="label">gtk-close</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">False</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="pack_type">end</property> + <property name="position">0</property> + </packing> + </child> + </object> + </child> + <action-widgets> + <action-widget response="-11">helpbutton1</action-widget> + <action-widget response="0">delete_button</action-widget> + <action-widget response="-7">closebutton1</action-widget> + </action-widgets> + </object> + <object class="GtkDialog" id="details_dialog"> + <property name="border_width">5</property> + <property name="title" translatable="yes">HTTP Proxy Details</property> + <property name="resizable">False</property> + <property name="type_hint">dialog</property> + <property name="has_separator">False</property> + <child internal-child="vbox"> + <object class="GtkVBox" id="dialog-vbox2"> + <property name="visible">True</property> + <property name="spacing">2</property> + <child> + <object class="GtkVBox" id="vbox3"> + <property name="visible">True</property> + <property name="border_width">5</property> + <property name="spacing">6</property> + <child> + <object class="GtkCheckButton" id="use_auth_checkbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + <child> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>_Use authentication</b></property> + <property name="use_markup">True</property> + <property name="use_underline">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox3"> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="label19"> + <property name="visible">True</property> + <property name="label"> </property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkTable" id="auth_table"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="n_rows">2</property> + <property name="n_columns">2</property> + <property name="column_spacing">12</property> + <property name="row_spacing">6</property> + <child> + <object class="GtkLabel" id="label15"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">U_sername:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">username_entry</property> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label16"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">_Password:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">password_entry</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkEntry" id="password_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="visibility">False</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkEntry" id="username_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child internal-child="action_area"> + <object class="GtkHButtonBox" id="dialog-action_area2"> + <property name="visible">True</property> + <property name="layout_style">end</property> + <child> + <object class="GtkButton" id="helpbutton2"> + <property name="label">gtk-help</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">False</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="closebutton2"> + <property name="label">gtk-close</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">False</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="pack_type">end</property> + <property name="position">0</property> + </packing> + </child> + </object> + </child> + <action-widgets> + <action-widget response="-11">helpbutton2</action-widget> + <action-widget response="-7">closebutton2</action-widget> + </action-widgets> + </object> + <object class="GtkDialog" id="location_new_dialog"> + <property name="border_width">6</property> + <property name="title" translatable="yes">Create New Location</property> + <property name="resizable">False</property> + <property name="modal">True</property> + <property name="destroy_with_parent">True</property> + <property name="type_hint">dialog</property> + <property name="has_separator">False</property> + <child internal-child="vbox"> + <object class="GtkVBox" id="dialog-vbox1"> + <property name="visible">True</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkHBox" id="hbox5"> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="label19"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Location name:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">text</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="text"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="activates_default">True</property> + </object> + <packing> + <property name="padding">6</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="error_label"> + <property name="label" translatable="yes">The location already exists.</property> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child internal-child="action_area"> + <object class="GtkHButtonBox" id="dialog-action_area1"> + <property name="visible">True</property> + <property name="layout_style">end</property> + <child> + <object class="GtkButton" id="new_location"> + <property name="label" translatable="yes">C_reate</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="image">new_location_btn_img</property> + <property name="use_underline">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button2"> + <property name="label">gtk-cancel</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="pack_type">end</property> + <property name="position">0</property> + </packing> + </child> + </object> + </child> + <action-widgets> + <action-widget response="-5">new_location</action-widget> + <action-widget response="-6">button2</action-widget> + </action-widgets> + </object> + <object class="GtkAdjustment" id="adjustment1"> + <property name="upper">65535</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + </object> + <object class="GtkAdjustment" id="adjustment2"> + <property name="upper">65535</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + </object> + <object class="GtkAdjustment" id="adjustment3"> + <property name="upper">65535</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + </object> + <object class="GtkAdjustment" id="adjustment4"> + <property name="upper">65535</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + </object> + <object class="GtkImage" id="new_location_btn_img"> + <property name="visible">True</property> + <property name="stock">gtk-add</property> + </object> + <object class="GtkImage" id="delete_button_img"> + <property name="visible">True</property> + <property name="stock">gtk-delete</property> + </object> +</interface> |