On Mon, Dec 19, 2016 at 1:05 PM, Pavel Grunt <pgrunt@xxxxxxxxxx> wrote: > Hey, would you mind splitting the usb icon change ? I really don't see a good reason for that. We would end up somewhere with an icon different of the rest for one commit, but yeah, could be done. > The icon is provided by some icon package or gtk ? The icon currently used in these patches is provided by gtk itself. The one replaced was made specifically for virt-viewer. > > Pavel > > On Sat, 2016-12-17 at 17:50 +0100, Fabiano Fidêncio wrote: >> From: Sagar Ghuge <ghugesss@xxxxxxxxx> >> >> In order to give a modern look to {virt,remote}-viewer let's replace >> the >> old toolbar for a headerbar (it's the widget shown when the app is >> fullscreen). >> >> The items in the headerbar are exactly the same ones present in the >> old >> toolbar. >> >> Signed-off-by: Sagar Ghuge <ghugesss@xxxxxxxxx> >> --- >> icons/24x24/Makefile.am | 4 - >> icons/24x24/virt-viewer-usb.png | Bin 1063 -> 0 bytes >> icons/24x24/virt-viewer-usb.svg | 204 --------------------- >> src/resources/ui/virt-viewer.ui | 62 +++++++ >> src/resources/virt-viewer.gresource.xml | 1 - >> src/virt-viewer-app.c | 2 +- >> src/virt-viewer-timed-revealer.c | 2 +- >> src/virt-viewer-window.c | 311 ++++----------------- >> ----------- >> src/virt-viewer-window.h | 2 +- >> 9 files changed, 105 insertions(+), 483 deletions(-) >> delete mode 100644 icons/24x24/virt-viewer-usb.png >> delete mode 100644 icons/24x24/virt-viewer-usb.svg >> >> diff --git a/icons/24x24/Makefile.am b/icons/24x24/Makefile.am >> index f2b6388..85f7553 100644 >> --- a/icons/24x24/Makefile.am >> +++ b/icons/24x24/Makefile.am >> @@ -5,8 +5,4 @@ apps_icondir = >> $(datadir)/icons/hicolor/$(size)/apps/ >> apps_icon_DATA = $(PACKAGE).png >> EXTRA_DIST += $(apps_icon_DATA) >> >> -devices_icondir = $(datadir)/icons/hicolor/$(size)/devices/ >> -devices_icon_DATA = virt-viewer-usb.png virt-viewer-usb.svg >> -EXTRA_DIST += $(devices_icon_DATA) >> - >> -include $(top_srcdir)/git.mk >> diff --git a/icons/24x24/virt-viewer-usb.png b/icons/24x24/virt- >> viewer-usb.png >> deleted file mode 100644 >> index >> e23661e402387bd2601c634860d2627b0aebe721..00000000000000000000000000 >> 00000000000000 >> GIT binary patch >> literal 0 >> HcmV?d00001 >> >> literal 1063 >> zcmV+?1laqDP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00006VoOIv0RI60 >> z0RN!9r;`8x1KdeOK~zYIm6lCtTvZgufA`)uv9=~5H8!DOT3ZV#;-;lk5|a`XQK1Vz >> zz=f7tUFpu9;L;c?f}1YfDNPYU3A#vwh#&Q%X)SS~p|wpi+N8-OO){OAbdt`z`{m-z >> zymXS8Ko1;v@6Y-CpL@@HVsv!0Mb`N<c;AI!3xM|?Aq4j#6+WH<@Qc&(c;Hp^MN>md >> zPeXm91VPzG2!Z!y#~3?1Jb?h7?|8HnG`15Wwku=cw=CzEo?gf<d>KTM?yi5JQLe78 >> zBu3R_G`+~l)4u`Gv`z8&-sVj^s^8Y2GIP^UN^4yTJl0yAb5(UAT%ouB0>*ia^Yr## >> zU?E(oY44l^z*?7*#u&T@Yi(66M4I0ION4oilnN;oVLrwRk*?|IJs4vMv^D@q*7fq) >> z&=tm}myk+U;A7KEd_HuA!Hbg>__yyrmpp522%NRV6je{~&MSv`??ev(oo}51;QXh@ >> z09ajJ<?N;D3j4J<9%n6qu`xx?*{TV0xm)CNw*Zhz0WdQY2MzO4f|aEl$9pi=5NNF{ >> zGF#^vIDdoTtBU}1v^Voo=ffx|5K<+!;fkj3tIG+tu>;Ur6If$$&L)`$hG!TYnM;fY >> zN9I5XUhdeLRGZ5e_-J69xiF%wwUJNW?xwlnegLMXt|y&XQ=-T@mt?*;wv1d?)gR*_ >> zFC1=7@Q=Sq$H7|~Ir-)jtcLUam#w7OITur8w81&QHUlXUvhu_@6wcWMpA940S{mp( >> zafrh0d92+yKj%C~8>BHNZpX%5Jae!OsZ@pDSC=A}*U9^?)<!;j;}9$1O`=FAzIUs0 >> zcI_U-U|hw~gAbvU;=4bm@!nGxC>ECsocew)8R!Sc53rn_#Tc`p^1FwvwIQ(9U`ulV >> z$S%%v^uP{Y>)8zm@^>QozP`fcsW2IGxG=M6@HjynH!#LvjIH1?lgW_DWJ)8Ey!+xl >> zP7O^mGLZ$KSS)TD9Ke{EBB`||o<sGeWsKp*<aJt`QV69GO7Y{>J0+fLt1%|N2gaDv >> zf~vkM0Dc<R{QmE4Wa$*0o6uMXJ^NCdP*fUnOp&R%DggevDG=*c!r$|PBYSK6l;Z~F >> zRyOM(6{J{qH3(FIwYsKHnR*!~h>~?tO}pB+BT5&rtX=!JZ|b9U6n9{?(Zymh<(#ki >> z$vm=0BIFK!{U_e4-TNP;d$%VuUA=1|1jS;6)h-IW=iGRDtmlzkdjcsXQp!@IwI6_` >> z+#=7m@8s3a#{kG?v&_zB*t#`daHS7DLWtxPji;{}@9ob)v0#p+)9KS=W7nPnf|{h> >> hn;50k58lex{|8sH2#IslN<07n002ovPDHLkV1iv){{;X5 >> >> diff --git a/icons/24x24/virt-viewer-usb.svg b/icons/24x24/virt- >> viewer-usb.svg >> deleted file mode 100644 >> index 4101f6e..0000000 >> --- a/icons/24x24/virt-viewer-usb.svg >> +++ /dev/null >> @@ -1,204 +0,0 @@ >> -<?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://creativecommons.org/ns#" >> - 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.d >> td" >> - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" >> - width="24" >> - height="24" >> - id="svg9434" >> - version="1.1" >> - inkscape:version="0.48.4 r9939" >> - sodipodi:docname="usb.svg"> >> - <defs >> - id="defs9436"> >> - <linearGradient >> - inkscape:collect="always" >> - id="linearGradient10012"> >> - <stop >> - style="stop-color:#d3d7cf;stop-opacity:1" >> - offset="0" >> - id="stop10014" /> >> - <stop >> - style="stop-color:#747671;stop-opacity:1" >> - offset="1" >> - id="stop10016" /> >> - </linearGradient> >> - <linearGradient >> - inkscape:collect="always" >> - id="linearGradient9985"> >> - <stop >> - style="stop-color:#a6a6a6;stop-opacity:1;" >> - offset="0" >> - id="stop9987" /> >> - <stop >> - style="stop-color:#eeeeec;stop-opacity:1" >> - offset="1" >> - id="stop9989" /> >> - </linearGradient> >> - <linearGradient >> - inkscape:collect="always" >> - id="linearGradient9977"> >> - <stop >> - style="stop-color:#fafafa;stop-opacity:1;" >> - offset="0" >> - id="stop9979" /> >> - <stop >> - style="stop-color:#fafafa;stop-opacity:0;" >> - offset="1" >> - id="stop9981" /> >> - </linearGradient> >> - <linearGradient >> - inkscape:collect="always" >> - xlink:href="#linearGradient9401" >> - id="linearGradient9407" >> - x1="714.20172" >> - y1="-81.798248" >> - x2="714.20172" >> - y2="-64.777008" >> - gradientUnits="userSpaceOnUse" >> - gradientTransform="translate(0,1)" /> >> - <linearGradient >> - inkscape:collect="always" >> - id="linearGradient9401"> >> - <stop >> - style="stop-color:#2e5991;stop-opacity:1" >> - offset="0" >> - id="stop9403" /> >> - <stop >> - style="stop-color:#4983c1;stop-opacity:1" >> - offset="1" >> - id="stop9405" /> >> - </linearGradient> >> - <radialGradient >> - inkscape:collect="always" >> - xlink:href="#linearGradient9977" >> - id="radialGradient9983" >> - cx="12.001339" >> - cy="1035.3622" >> - fx="12.001339" >> - fy="1035.3622" >> - r="11.03125" >> - gradientTransform="matrix(3.5911562,0,0,1.7223807,- >> 31.098681,-747.92565)" >> - gradientUnits="userSpaceOnUse" /> >> - <linearGradient >> - inkscape:collect="always" >> - xlink:href="#linearGradient9985" >> - id="linearGradient9991" >> - x1="13.481804" >> - y1="1057.5219" >> - x2="13.481804" >> - y2="1028.9601" >> - gradientUnits="userSpaceOnUse" /> >> - <linearGradient >> - inkscape:collect="always" >> - xlink:href="#linearGradient10012" >> - id="linearGradient10018" >> - x1="20.287706" >> - y1="1029.2219" >> - x2="20.287706" >> - y2="1052.9133" >> - gradientUnits="userSpaceOnUse" /> >> - </defs> >> - <sodipodi:namedview >> - id="base" >> - pagecolor="#ffffff" >> - bordercolor="#666666" >> - borderopacity="1.0" >> - inkscape:pageopacity="1" >> - inkscape:pageshadow="2" >> - inkscape:zoom="1" >> - inkscape:cx="14.456171" >> - inkscape:cy="42.877288" >> - inkscape:document-units="px" >> - inkscape:current-layer="layer1" >> - showgrid="false" >> - inkscape:snap-nodes="false" >> - inkscape:snap-bbox="true" >> - borderlayer="true" >> - inkscape:showpageshadow="false" >> - showborder="false" >> - inkscape:window-width="1311" >> - inkscape:window-height="1189" >> - inkscape:window-x="764" >> - inkscape:window-y="173" >> - inkscape:window-maximized="0"> >> - <inkscape:grid >> - type="xygrid" >> - id="grid9463" >> - empspacing="5" >> - visible="true" >> - enabled="true" >> - snapvisiblegridlinesonly="true" /> >> - </sodipodi:namedview> >> - <metadata >> - id="metadata9439"> >> - <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></dc:title> >> - </cc:Work> >> - </rdf:RDF> >> - </metadata> >> - <g >> - inkscape:label="Layer 1" >> - inkscape:groupmode="layer" >> - id="layer1" >> - transform="translate(0,-1028.3622)"> >> - <rect >> - style="color:#000000;fill:url(#linearGradient9991);fill- >> opacity:1;fill-rule:nonzero;stroke:url(#linearGradient10018);stroke- >> width:0.99999994000000003;stroke-miterlimit:4;stroke- >> opacity:1;stroke- >> dasharray:none;marker:none;visibility:visible;display:inline;overflo >> w:visible;enable-background:accumulate" >> - id="rect9973" >> - width="23.000017" >> - height="23.000017" >> - x="0.5" >> - y="1028.8622" >> - rx="2.1213202" >> - ry="2.1213202" /> >> - <path >> - sodipodi:type="inkscape:offset" >> - inkscape:radius="-0.9722718" >> - inkscape:original="M 2.625 1028.875 C 1.4497886 1028.875 0.5 >> 1029.7935 0.5 1030.9688 L 0.5 1049.75 C 0.5 1050.9252 1.4497886 >> 1051.875 2.625 1051.875 L 21.375 1051.875 C 22.550211 1051.875 23.5 >> 1050.9252 23.5 1049.75 L 23.5 1030.9688 C 23.5 1029.7935 22.550211 >> 1028.875 21.375 1028.875 L 2.625 1028.875 z " >> - xlink:href="#rect9973" >> - style="color:#000000;fill:none;stroke:url(#radialGradient998 >> 3);stroke-width:0.99999994000000003;stroke-miterlimit:4;stroke- >> opacity:1;stroke- >> dasharray:none;marker:none;visibility:visible;display:inline;overflo >> w:visible;enable-background:accumulate" >> - id="path9975" >> - inkscape:href="#rect9973" >> - d="m 2.625,1029.8438 c -0.6686179,0 -1.15625,0.4735 >> -1.15625,1.125 l 0,18.7812 c 0,0.6513 0.5048954,1.1562 >> 1.15625,1.1562 l 18.75,0 c 0.651354,0 1.15625,-0.5049 1.15625,- >> 1.1562 l 0,-18.7812 c 0,-0.6515 -0.487633,-1.125 -1.15625,-1.125 l >> -18.75,0 z" /> >> - <g >> - transform="translate(-703,1112.3622)" >> - style="display:inline;enable-background:new" >> - id="g9411"> >> - <path >> - d="m 715,-83 -4,5 3,0 0,7.5625 -1.3125,-1.3125 C >> 712.86766,-72.1354 713,-72.54648 713,-73 c 0,-1.65685 -1.34315,-3 >> -3,-3 -1.65685,0 -3,1.34315 -3,3 0,1.65685 1.34315,3 3,3 0.45352,0 >> 0.8646,-0.13234 1.25,-0.3125 l 2.625,2.4375 0.125,0.09375 c >> -1.15835,0.41551 -2,1.51118 -2,2.8125 0,1.65685 1.34315,3 3,3 >> 1.65685,0 3,-1.34315 3,-3 0,-1.30132 -0.84165,-2.39699 -2,-2.8125 l >> 0,-2.78125 4.4375,-4.4375 2.5625,0 0,-4 -4,0 0,1 0,1.5625 -3,3 0,- >> 4.5625 3,0 -4,-5 z" >> - inkscape:href="#path9368" >> - id="path9399" >> - style="font-size:medium;font-style:normal;font- >> variant:normal;font-weight:normal;font-stretch:normal;text- >> indent:0;text-align:start;text-decoration:none;line- >> height:normal;letter-spacing:normal;word-spacing:normal;text- >> transform:none;direction:ltr;block-progression:tb;writing-mode:lr- >> tb;text-anchor:start;baseline- >> shift:baseline;color:#000000;fill:#ffffff;fill- >> opacity:0.82488477;stroke:none;stroke- >> width:2;marker:none;visibility:visible;display:inline;overflow:visib >> le;enable-background:accumulate;font-family:Sans;-inkscape-font- >> specification:Sans" >> - xlink:href="#path9368" >> - inkscape:original="M 715 -83 L 711 -78 L 714 -78 L 714 >> -70.4375 L 712.6875 -71.75 C 712.86766 -72.1354 713 -72.54648 713 >> -73 C 713 -74.65685 711.65685 -76 710 -76 C 708.34315 -76 707 >> -74.65685 707 -73 C 707 -71.34315 708.34315 -70 710 -70 C 710.45352 >> -70 710.8646 -70.13234 711.25 -70.3125 L 713.875 -67.875 L 714 >> -67.78125 C 712.84165 -67.36574 712 -66.27007 712 -64.96875 C 712 >> -63.3119 713.34315 -61.96875 715 -61.96875 C 716.65685 -61.96875 718 >> -63.3119 718 -64.96875 C 718 -66.27007 717.15835 -67.36574 716 >> -67.78125 L 716 -70.5625 L 720.4375 -75 L 723 -75 L 723 -79 L 719 >> -79 L 719 -78 L 719 -76.4375 L 716 -73.4375 L 716 -78 L 719 -78 L >> 715 -83 z " >> - inkscape:radius="0" >> - sodipodi:type="inkscape:offset" >> - transform="translate(0,0.97227174)" /> >> - <path >> - sodipodi:nodetypes="cccccsssscccsssccccccccccc" >> - inkscape:connector-curvature="0" >> - id="path9368" >> - d="m 715,-83 -4,5 3,0 0,7.5625 -1.3125,-1.3125 C >> 712.86766,-72.1354 713,-72.54648 713,-73 c 0,-1.65685 -1.34315,-3 >> -3,-3 -1.65685,0 -3,1.34315 -3,3 0,1.65685 1.34315,3 3,3 0.45352,0 >> 0.8646,-0.13234 1.25,-0.3125 l 2.61742,2.440641 0.13258,0.08709 c >> -1.15835,0.41551 -2,1.51118 -2,2.8125 0,1.65685 1.34315,3 3,3 >> 1.65685,0 3,-1.34315 3,-3 0,-1.30132 -0.84165,-2.39699 -2,-2.8125 l >> 0,-2.777728 4.4375,-4.4375 2.5625,0 0,-4 -4,0 0,2.5625 -3,3 0,- >> 4.5625 3,0 z" >> - style="font-size:medium;font-style:normal;font- >> variant:normal;font-weight:normal;font-stretch:normal;text- >> indent:0;text-align:start;text-decoration:none;line- >> height:normal;letter-spacing:normal;word-spacing:normal;text- >> transform:none;direction:ltr;block-progression:tb;writing-mode:lr- >> tb;text-anchor:start;baseline- >> shift:baseline;color:#000000;fill:url(#linearGradient9407);fill- >> opacity:1;stroke:none;stroke- >> width:2;marker:none;visibility:visible;display:inline;overflow:visib >> le;enable-background:accumulate;font-family:Sans;-inkscape-font- >> specification:Sans" /> >> - <rect >> - y="-84" >> - x="703" >> - height="24" >> - width="24" >> - id="rect9409" >> - style="color:#000000;fill:none;stroke:none;stroke- >> width:2;marker:none;visibility:visible;display:inline;overflow:visib >> le;enable-background:accumulate" /> >> - </g> >> - </g> >> -</svg> >> diff --git a/src/resources/ui/virt-viewer.ui >> b/src/resources/ui/virt-viewer.ui >> index 42cd849..c211440 100644 >> --- a/src/resources/ui/virt-viewer.ui >> +++ b/src/resources/ui/virt-viewer.ui >> @@ -222,4 +222,66 @@ >> </object> >> </child> >> </object> >> + <object class="GtkHeaderBar" id="fullscreen-headerbar"> >> + <property name="visible">True</property> >> + <property name="show-close-button">True</property> >> + <child> >> + <object class="GtkButton" id="fullscreen-usb-devices"> >> + <property name="visible">False</property> >> + <property name="tooltip-text">USB device >> selection</property> >> + <style> >> + <class name="image-button"/> >> + </style> >> + <child> >> + <object class="GtkImage" id="fullscreen-usb-devices- >> icon"> >> + <property name="visible">True</property> >> + <property name="icon-name">media-removable- >> symbolic</property> >> + <property name="icon-size">1</property> >> + </object> >> + </child> >> + </object> >> + <packing> >> + <property name="pack-type">end</property> >> + </packing> >> + </child> >> + <child> >> + <object class="GtkMenuButton" id="fullscreen-send-keys"> >> + <property name="visible">True</property> >> + <property name="use-popover">True</property> >> + <property name="tooltip-text">Send key >> combination</property> >> + <style> >> + <class name="image-button"/> >> + </style> >> + <child> >> + <object class="GtkImage" id="fullscreen-send-keys-icon"> >> + <property name="visible">True</property> >> + <property name="icon-name">input-keyboard- >> symbolic</property> >> + <property name="icon-size">1</property> >> + </object> >> + </child> >> + </object> >> + <packing> >> + <property name="pack-type">end</property> >> + </packing> >> + </child> >> + <child> >> + <object class="GtkButton" id="leave-fullscreen"> >> + <property name="visible">True</property> >> + <property name="tooltip-text">Leave fullscreen</property> >> + <style> >> + <class name="image-button"/> >> + </style> >> + <child> >> + <object class="GtkImage" id="leave-fullscreen-image"> >> + <property name="visible">True</property> >> + <property name="icon-name">view-restore- >> symbolic</property> >> + <property name="icon-size">1</property> >> + </object> >> + </child> >> + </object> >> + <packing> >> + <property name="pack-type">end</property> >> + </packing> >> + </child> >> + </object> >> </interface> >> diff --git a/src/resources/virt-viewer.gresource.xml >> b/src/resources/virt-viewer.gresource.xml >> index f4fbab9..7bd66f9 100644 >> --- a/src/resources/virt-viewer.gresource.xml >> +++ b/src/resources/virt-viewer.gresource.xml >> @@ -14,7 +14,6 @@ >> <file alias="icons/16x16/virt- >> viewer.png">../../icons/16x16/virt-viewer.png</file> >> <file alias="icons/22x22/virt- >> viewer.png">../../icons/22x22/virt-viewer.png</file> >> <file alias="icons/24x24/virt- >> viewer.png">../../icons/24x24/virt-viewer.png</file> >> - <file alias="icons/24x24/virt-viewer- >> usb.png">../../icons/24x24/virt-viewer-usb.png</file> >> <file alias="icons/32x32/virt- >> viewer.png">../../icons/32x32/virt-viewer.png</file> >> <file alias="icons/48x48/virt- >> viewer.png">../../icons/48x48/virt-viewer.png</file> >> <file alias="icons/256x256/virt- >> viewer.png">../../icons/256x256/virt-viewer.png</file> >> diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c >> index 580bef0..fa8b008 100644 >> --- a/src/virt-viewer-app.c >> +++ b/src/virt-viewer-app.c >> @@ -2375,7 +2375,7 @@ window_update_menu_displays_cb(gpointer value, >> GtkMenuButton *button = >> virt_viewer_window_get_menu_button_displays(VIRT_VIEWER_WINDOW(value >> )); >> >> sensitive = (keys != NULL); >> - virt_viewer_window_set_menu_displays_sensitive(VIRT_VIEWER_WIND >> OW(value), sensitive); >> + virt_viewer_window_set_headerbar_displays_sensitive(VIRT_VIEWER >> _WINDOW(value), sensitive); >> >> tmp = keys; >> while (tmp) { >> diff --git a/src/virt-viewer-timed-revealer.c b/src/virt-viewer- >> timed-revealer.c >> index 3c48ab5..fbb8583 100644 >> --- a/src/virt-viewer-timed-revealer.c >> +++ b/src/virt-viewer-timed-revealer.c >> @@ -178,7 +178,7 @@ virt_viewer_timed_revealer_new(GtkWidget >> *toolbar) >> */ >> >> gtk_container_add(GTK_CONTAINER(self), priv->revealer); >> - gtk_widget_set_halign(GTK_WIDGET(self), GTK_ALIGN_CENTER); >> + gtk_widget_set_halign(GTK_WIDGET(self), GTK_ALIGN_FILL); >> gtk_widget_set_valign(GTK_WIDGET(self), GTK_ALIGN_START); >> gtk_widget_show_all(GTK_WIDGET(self)); >> >> diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c >> index c1278ca..60ab088 100644 >> --- a/src/virt-viewer-window.c >> +++ b/src/virt-viewer-window.c >> @@ -56,11 +56,10 @@ void virt_viewer_window_menu_send(GtkWidget >> *menu, VirtViewerWindow *self); >> static void virt_viewer_window_enable_modifiers(VirtViewerWindow >> *self); >> static void virt_viewer_window_disable_modifiers(VirtViewerWindow >> *self); >> static void virt_viewer_window_queue_resize(VirtViewerWindow >> *self); >> -static void virt_viewer_window_toolbar_setup(VirtViewerWindow >> *self); >> +static void >> virt_viewer_window_fullscreen_headerbar_setup(VirtViewerWindow >> *self); >> static void >> virt_viewer_window_menu_view_fullscreen(VirtViewerWindow *self); >> static void usb_device_selection_activated(GSimpleAction *action, >> GVariant *parameter, gpointer window); >> >> -static GtkMenu* >> virt_viewer_window_get_keycombo_menu(VirtViewerWindow *self); >> static gint >> virt_viewer_window_get_minimal_zoom_level(VirtViewerWindow *self); >> >> >> @@ -82,10 +81,9 @@ struct _VirtViewerWindowPrivate { >> >> GtkBuilder *builder; >> GtkWidget *window; >> - GtkWidget *toolbar; >> GtkWidget *header; >> + GtkWidget *fullscreen_headerbar; >> GtkWidget *toolbar_usb_device_selection; >> - GtkWidget *toolbar_send_key; >> GtkAccelGroup *accel_group; >> VirtViewerNotebook *notebook; >> VirtViewerDisplay *display; >> @@ -192,7 +190,7 @@ virt_viewer_window_dispose (GObject *object) >> priv->subtitle = NULL; >> >> g_value_unset(&priv->accel_setting); >> - priv->toolbar = NULL; >> + priv->fullscreen_headerbar = NULL; >> >> G_OBJECT_CLASS (virt_viewer_window_parent_class)->dispose >> (object); >> } >> @@ -248,14 +246,6 @@ virt_viewer_window_class_init >> (VirtViewerWindowClass *klass) >> G_PARAM_STA >> TIC_STRINGS)); >> } >> >> -static gboolean >> -can_activate_cb (GtkWidget *widget G_GNUC_UNUSED, >> - guint signal_id G_GNUC_UNUSED, >> - VirtViewerWindow *self G_GNUC_UNUSED) >> -{ >> - return TRUE; >> -} >> - >> static void >> fullscreen_activated(GSimpleAction *action G_GNUC_UNUSED, >> GVariant *parameter G_GNUC_UNUSED, >> @@ -692,7 +682,7 @@ virt_viewer_window_init (VirtViewerWindow *self) >> priv->accel_group = >> GTK_ACCEL_GROUP(gtk_builder_get_object(priv->builder, >> "accelgroup")); >> >> vbox = GTK_WIDGET(gtk_builder_get_object(priv->builder, >> "viewer-box")); >> - virt_viewer_window_toolbar_setup(self); >> + virt_viewer_window_fullscreen_headerbar_setup(self); >> >> gtk_box_pack_end(GTK_BOX(vbox), GTK_WIDGET(priv->notebook), >> TRUE, TRUE, 0); >> >> @@ -822,7 +812,7 @@ >> virt_viewer_window_leave_fullscreen(VirtViewerWindow *self) >> virt_viewer_display_set_fullscreen(priv->display, FALSE); >> } >> virt_viewer_timed_revealer_force_reveal(priv->revealer, FALSE); >> - gtk_widget_hide(priv->toolbar); >> + gtk_widget_hide(priv->fullscreen_headerbar); >> gtk_widget_set_size_request(priv->window, -1, -1); >> gtk_window_unfullscreen(GTK_WINDOW(priv->window)); >> >> @@ -853,7 +843,7 @@ >> virt_viewer_window_enter_fullscreen(VirtViewerWindow *self, gint >> monitor) >> return; >> } >> >> - gtk_widget_show(priv->toolbar); >> + gtk_widget_show(priv->fullscreen_headerbar); >> virt_viewer_timed_revealer_force_reveal(priv->revealer, TRUE); >> >> if (priv->display) { >> @@ -865,174 +855,6 @@ >> virt_viewer_window_enter_fullscreen(VirtViewerWindow *self, gint >> monitor) >> gtk_window_fullscreen(GTK_WINDOW(priv->window)); >> } >> >> -#define MAX_KEY_COMBO 4 >> -struct keyComboDef { >> - guint keys[MAX_KEY_COMBO]; >> - const char *label; >> - const gchar* accel_path; >> -}; >> - >> -struct gkeyComboDef { >> - const char *label; >> - const gchar* action; >> -}; >> - >> -static const struct keyComboDef keyCombos[] = { >> - { { GDK_KEY_Control_L, GDK_KEY_Alt_L, GDK_KEY_Delete, >> GDK_KEY_VoidSymbol }, N_("Ctrl+Alt+_Del"), "<virt- >> viewer>/send/secure-attention"}, >> - { { GDK_KEY_Control_L, GDK_KEY_Alt_L, GDK_KEY_BackSpace, >> GDK_KEY_VoidSymbol }, N_("Ctrl+Alt+_Backspace"), NULL}, >> - { { GDK_KEY_VoidSymbol }, "" , NULL}, >> - { { GDK_KEY_Control_L, GDK_KEY_Alt_L, GDK_KEY_F1, >> GDK_KEY_VoidSymbol }, N_("Ctrl+Alt+F_1"), NULL}, >> - { { GDK_KEY_Control_L, GDK_KEY_Alt_L, GDK_KEY_F2, >> GDK_KEY_VoidSymbol }, N_("Ctrl+Alt+F_2"), NULL}, >> - { { GDK_KEY_Control_L, GDK_KEY_Alt_L, GDK_KEY_F3, >> GDK_KEY_VoidSymbol }, N_("Ctrl+Alt+F_3"), NULL}, >> - { { GDK_KEY_Control_L, GDK_KEY_Alt_L, GDK_KEY_F4, >> GDK_KEY_VoidSymbol }, N_("Ctrl+Alt+F_4"), NULL}, >> - { { GDK_KEY_Control_L, GDK_KEY_Alt_L, GDK_KEY_F5, >> GDK_KEY_VoidSymbol }, N_("Ctrl+Alt+F_5"), NULL}, >> - { { GDK_KEY_Control_L, GDK_KEY_Alt_L, GDK_KEY_F6, >> GDK_KEY_VoidSymbol }, N_("Ctrl+Alt+F_6"), NULL}, >> - { { GDK_KEY_Control_L, GDK_KEY_Alt_L, GDK_KEY_F7, >> GDK_KEY_VoidSymbol }, N_("Ctrl+Alt+F_7"), NULL}, >> - { { GDK_KEY_Control_L, GDK_KEY_Alt_L, GDK_KEY_F8, >> GDK_KEY_VoidSymbol }, N_("Ctrl+Alt+F_8"), NULL}, >> - { { GDK_KEY_Control_L, GDK_KEY_Alt_L, GDK_KEY_F9, >> GDK_KEY_VoidSymbol }, N_("Ctrl+Alt+F_9"), NULL}, >> - { { GDK_KEY_Control_L, GDK_KEY_Alt_L, GDK_KEY_F10, >> GDK_KEY_VoidSymbol }, N_("Ctrl+Alt+F1_0"), NULL}, >> - { { GDK_KEY_Control_L, GDK_KEY_Alt_L, GDK_KEY_F11, >> GDK_KEY_VoidSymbol }, N_("Ctrl+Alt+F11"), NULL}, >> - { { GDK_KEY_Control_L, GDK_KEY_Alt_L, GDK_KEY_F12, >> GDK_KEY_VoidSymbol }, N_("Ctrl+Alt+F12"), NULL}, >> - { { GDK_KEY_VoidSymbol }, "" , NULL}, >> - { { GDK_KEY_Print, GDK_KEY_VoidSymbol }, "_PrintScreen", NULL}, >> -}; >> - >> -static guint >> -get_nkeys(const guint *keys) >> -{ >> - guint i; >> - >> - for (i = 0; keys[i] != GDK_KEY_VoidSymbol; ) >> - i++; >> - >> - return i; >> -} >> - >> -G_MODULE_EXPORT void >> -virt_viewer_window_menu_send(GtkWidget *menu, >> - VirtViewerWindow *self) >> -{ >> - VirtViewerWindowPrivate *priv = self->priv; >> - >> - g_return_if_fail(priv->display != NULL); >> - guint *keys = g_object_get_data(G_OBJECT(menu), "vv-keys"); >> - g_return_if_fail(keys != NULL); >> - >> - virt_viewer_display_send_keys(VIRT_VIEWER_DISPLAY(priv- >> >display), >> - keys, get_nkeys(keys)); >> -} >> - >> -static void >> -virt_viewer_menu_add_combo(VirtViewerWindow *self, GtkMenu *menu, >> - const guint *keys, const gchar *label, >> const gchar* accel_path) >> -{ >> - GtkWidget *item; >> - >> - if (keys == NULL || keys[0] == GDK_KEY_VoidSymbol) { >> - item = gtk_separator_menu_item_new(); >> - } else { >> - item = gtk_menu_item_new_with_mnemonic(label); >> - if (accel_path) { >> - gtk_menu_item_set_accel_path(GTK_MENU_ITEM(item), >> accel_path); >> - /* make accel work in fullscreen */ >> - g_signal_connect(item, "can-activate-accel", >> G_CALLBACK(can_activate_cb), self); >> - } >> - guint *ckeys = g_memdup(keys, (get_nkeys(keys) + 1) * >> sizeof(guint)); >> - g_object_set_data_full(G_OBJECT(item), "vv-keys", ckeys, >> g_free); >> - g_signal_connect(item, "activate", >> G_CALLBACK(virt_viewer_window_menu_send), self); >> - } >> - >> - gtk_container_add(GTK_CONTAINER(menu), item); >> -} >> - >> -static guint* >> -accel_key_to_keys(const GtkAccelKey *key) >> -{ >> - guint i; >> - guint *val, *keys; >> - const struct { >> - const guint mask; >> - const guint key; >> - } modifiers[] = { >> - {GDK_SHIFT_MASK, GDK_KEY_Shift_L}, >> - {GDK_CONTROL_MASK, GDK_KEY_Control_L}, >> - {GDK_MOD1_MASK, GDK_KEY_Alt_L}, >> - }; >> - >> - g_warn_if_fail((key->accel_mods & >> - ~(GDK_SHIFT_MASK | GDK_CONTROL_MASK | >> GDK_MOD1_MASK)) == 0); >> - >> - keys = val = g_new(guint, 5); /* up to 3 modifiers, key and the >> stop symbol */ >> - /* first, send the modifiers */ >> - for (i = 0; i < G_N_ELEMENTS(modifiers); i++) { >> - if (key->accel_mods & modifiers[i].mask) >> - *val++ = modifiers[i].key; >> - } >> - >> - /* only after, the non-modifier key (ctrl-t, not t-ctrl) */ >> - *val++ = key->accel_key; >> - /* stop symbol */ >> - *val = GDK_KEY_VoidSymbol; >> - >> - return keys; >> -} >> - >> -struct accelCbData >> -{ >> - VirtViewerWindow *self; >> - GtkMenu *menu; >> -}; >> - >> -static void >> -accel_map_item_cb(gpointer data, >> - const gchar *accel_path, >> - guint accel_key, >> - GdkModifierType accel_mods, >> - gboolean changed G_GNUC_UNUSED) >> -{ >> - struct accelCbData *d = data; >> - GtkAccelKey key = { >> - .accel_key = accel_key, >> - .accel_mods = accel_mods >> - }; >> - >> - if (!g_str_has_prefix(accel_path, "<virt-viewer>")) >> - return; >> - if (accel_key == GDK_KEY_VoidSymbol || accel_key == 0) >> - return; >> - >> - guint *keys = accel_key_to_keys(&key); >> - gchar *label = gtk_accelerator_get_label(accel_key, >> accel_mods); >> - virt_viewer_menu_add_combo(d->self, d->menu, keys, label, >> NULL); >> - g_free(label); >> - g_free(keys); >> -} >> - >> -static GtkMenu* >> -virt_viewer_window_get_keycombo_menu(VirtViewerWindow *self) >> -{ >> - gint i; >> - VirtViewerWindowPrivate *priv = self->priv; >> - GtkMenu *menu = GTK_MENU(gtk_menu_new()); >> - gtk_menu_set_accel_group(menu, priv->accel_group); >> - >> - for (i = 0 ; i < G_N_ELEMENTS(keyCombos); i++) { >> - virt_viewer_menu_add_combo(self, menu, keyCombos[i].keys, >> keyCombos[i].label, keyCombos[i].accel_path); >> - } >> - >> - if (virt_viewer_app_get_enable_accel(priv->app)) { >> - struct accelCbData d = { >> - .self = self, >> - .menu = menu >> - }; >> - >> - gtk_accel_map_foreach(&d, accel_map_item_cb); >> - } >> - >> - gtk_widget_show_all(GTK_WIDGET(menu)); >> - return menu; >> -} >> - >> void >> virt_viewer_window_disable_modifiers(VirtViewerWindow *self) >> { >> @@ -1109,15 +931,6 @@ virt_viewer_window_delete(GtkWidget *src >> G_GNUC_UNUSED, >> return TRUE; >> } >> >> - >> -static void >> -virt_viewer_window_menu_file_quit(GtkWidget *src G_GNUC_UNUSED, >> - VirtViewerWindow *self) >> -{ >> - virt_viewer_app_maybe_quit(self->priv->app, self); >> -} >> - >> - >> static void >> virt_viewer_window_set_fullscreen(VirtViewerWindow *self, >> gboolean fullscreen) >> @@ -1135,39 +948,12 @@ >> virt_viewer_window_set_fullscreen(VirtViewerWindow *self, >> } >> >> static void >> -virt_viewer_window_toolbar_leave_fullscreen(GtkWidget *button >> G_GNUC_UNUSED, >> +virt_viewer_window_headerbar_leave_fullscreen(GtkWidget *button >> G_GNUC_UNUSED, >> VirtViewerWindow *self) >> { >> virt_viewer_window_set_fullscreen(self, FALSE); >> } >> >> -static void keycombo_menu_location(GtkMenu *menu G_GNUC_UNUSED, >> gint *x, gint *y, >> - gboolean *push_in, gpointer >> user_data) >> -{ >> - VirtViewerWindow *self = user_data; >> - GtkAllocation allocation; >> - GtkWidget *toplevel = gtk_widget_get_toplevel(self->priv- >> >toolbar_send_key); >> - >> - *push_in = TRUE; >> - gdk_window_get_origin(gtk_widget_get_window(toplevel), x, y); >> - gtk_widget_translate_coordinates(self->priv->toolbar_send_key, >> toplevel, >> - *x, *y, x, y); >> - gtk_widget_get_allocation(self->priv->toolbar_send_key, >> &allocation); >> - *y += allocation.height; >> -} >> - >> -static void >> -virt_viewer_window_toolbar_send_key(GtkWidget *button >> G_GNUC_UNUSED, >> - VirtViewerWindow *self) >> -{ >> - GtkMenu *menu = virt_viewer_window_get_keycombo_menu(self); >> - gtk_menu_attach_to_widget(menu, self->priv->window, NULL); >> - g_object_ref_sink(menu); >> - gtk_menu_popup(menu, NULL, NULL, keycombo_menu_location, self, >> - 0, gtk_get_current_event_time()); >> - g_object_unref(menu); >> -} >> - >> static void >> virt_viewer_window_menu_view_fullscreen(VirtViewerWindow *self) >> { >> @@ -1184,56 +970,39 @@ >> virt_viewer_window_guest_details_response(GtkDialog *dialog, >> } >> >> static void >> -virt_viewer_window_toolbar_setup(VirtViewerWindow *self) >> +virt_viewer_window_headerbar_usb_device_selection(GtkWidget *menu >> G_GNUC_UNUSED, >> + VirtViewerWindow >> *self) >> +{ >> + virt_viewer_session_usb_device_selection(virt_viewer_app_get_se >> ssion(self->priv->app), >> + GTK_WINDOW(self->priv- >> >window)); >> +} >> + >> +static void >> +virt_viewer_window_fullscreen_headerbar_setup(VirtViewerWindow >> *self) >> { >> - GtkWidget *button; >> GtkWidget *overlay; >> + GtkWidget *leave_fullscreen_button; >> + GtkWidget *usb_devices_button; >> + GtkWidget *send_keys_button; >> + GMenuModel *send_keys_menu; >> + >> VirtViewerWindowPrivate *priv = self->priv; >> >> - priv->toolbar = gtk_toolbar_new(); >> - gtk_toolbar_set_show_arrow(GTK_TOOLBAR(priv->toolbar), FALSE); >> - gtk_widget_set_no_show_all(priv->toolbar, TRUE); >> - gtk_toolbar_set_style(GTK_TOOLBAR(priv->toolbar), >> GTK_TOOLBAR_BOTH_HORIZ); >> - >> - /* Close connection */ >> - button = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); >> - gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(button), "window- >> close"); >> - gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), >> _("Disconnect")); >> - gtk_widget_show(button); >> - gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), GTK_TOOL_ITEM >> (button), 0); >> - g_signal_connect(button, "clicked", >> G_CALLBACK(virt_viewer_window_menu_file_quit), self); >> - >> - /* USB Device selection */ >> - button = >> gtk_image_new_from_resource(VIRT_VIEWER_RESOURCE_PREFIX"/icons/24x24 >> /virt-viewer-usb.png"); >> - button = GTK_WIDGET(gtk_tool_button_new(button, NULL)); >> - gtk_tool_button_set_label(GTK_TOOL_BUTTON(button), _("USB >> device selection")); >> - gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), _("USB >> device selection")); >> - gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), >> GTK_TOOL_ITEM(button), 0); >> - g_signal_connect(button, "clicked", >> G_CALLBACK(usb_device_selection_activated), self); >> - priv->toolbar_usb_device_selection = button; >> - gtk_widget_show_all(button); >> - >> - /* Send key */ >> - button = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); >> - gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(button), >> "preferences-desktop-keyboard-shortcuts"); >> - gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), _("Send >> key combination")); >> - gtk_widget_show(button); >> - gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), >> GTK_TOOL_ITEM(button), 0); >> - g_signal_connect(button, "clicked", >> G_CALLBACK(virt_viewer_window_toolbar_send_key), self); >> - gtk_widget_set_sensitive(button, FALSE); >> - priv->toolbar_send_key = button; >> - >> - /* Leave fullscreen */ >> - button = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); >> - gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(button), "view- >> restore"); >> - gtk_tool_button_set_label(GTK_TOOL_BUTTON(button), _("Leave >> fullscreen")); >> - gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), _("Leave >> fullscreen")); >> - gtk_tool_item_set_is_important(GTK_TOOL_ITEM(button), TRUE); >> - gtk_widget_show(button); >> - gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), >> GTK_TOOL_ITEM(button), 0); >> - g_signal_connect(button, "clicked", >> G_CALLBACK(virt_viewer_window_toolbar_leave_fullscreen), self); >> - >> - priv->revealer = virt_viewer_timed_revealer_new(priv->toolbar); >> + leave_fullscreen_button = >> GTK_WIDGET(gtk_builder_get_object(priv->builder, "leave- >> fullscreen")); >> + g_signal_connect(leave_fullscreen_button, "clicked", >> + G_CALLBACK(virt_viewer_window_headerbar_leave >> _fullscreen), self); >> + >> + send_keys_button = GTK_WIDGET(gtk_builder_get_object(priv- >> >builder, "fullscreen-send-keys")); >> + send_keys_menu = G_MENU_MODEL (gtk_builder_get_object (priv- >> >builder, "send-keys-menu")); >> + gtk_menu_button_set_menu_model (GTK_MENU_BUTTON >> (send_keys_button), send_keys_menu); >> + >> + usb_devices_button = GTK_WIDGET(gtk_builder_get_object(priv- >> >builder, "fullscreen-usb-devices")); >> + priv->toolbar_usb_device_selection = usb_devices_button; >> + g_signal_connect(usb_devices_button, "clicked", >> + G_CALLBACK(virt_viewer_window_headerbar_usb_de >> vice_selection), self); >> + >> + priv->fullscreen_headerbar = >> GTK_WIDGET(gtk_builder_get_object(priv->builder, "fullscreen- >> headerbar")); >> + priv->revealer = virt_viewer_timed_revealer_new(priv- >> >fullscreen_headerbar); >> overlay = GTK_WIDGET(gtk_builder_get_object(priv->builder, >> "viewer-overlay")); >> gtk_overlay_add_overlay(GTK_OVERLAY(overlay), GTK_WIDGET(priv- >> >revealer)); >> } >> @@ -1336,17 +1105,17 @@ >> virt_viewer_window_update_title(VirtViewerWindow *self) >> } >> >> void >> -virt_viewer_window_set_menu_displays_sensitive(VirtViewerWindow >> *self, gboolean sensitive) >> +virt_viewer_window_set_headerbar_displays_sensitive(VirtViewerWindo >> w *self, gboolean sensitive) >> { >> VirtViewerWindowPrivate *priv; >> - GtkWidget *menu; >> + GtkWidget *displays; >> >> g_return_if_fail(VIRT_VIEWER_IS_WINDOW(self)); >> >> priv = self->priv; >> >> - menu = GTK_WIDGET(gtk_builder_get_object(priv->builder, >> "displays")); >> - gtk_widget_set_sensitive(menu, sensitive); >> + displays = GTK_WIDGET(gtk_builder_get_object(priv->builder, >> "displays")); >> + gtk_widget_set_sensitive(displays, sensitive); >> } >> >> void >> diff --git a/src/virt-viewer-window.h b/src/virt-viewer-window.h >> index f578637..17cc6cf 100644 >> --- a/src/virt-viewer-window.h >> +++ b/src/virt-viewer-window.h >> @@ -68,7 +68,7 @@ GtkWindow* virt_viewer_window_get_window >> (VirtViewerWindow* window); >> VirtViewerNotebook* virt_viewer_window_get_notebook >> (VirtViewerWindow* window); >> void virt_viewer_window_set_display(VirtViewerWindow *self, >> VirtViewerDisplay *display); >> VirtViewerDisplay* virt_viewer_window_get_display(VirtViewerWindow >> *self); >> -void >> virt_viewer_window_set_menu_displays_sensitive(VirtViewerWindow >> *self, gboolean sensitive); >> +void >> virt_viewer_window_set_headerbar_displays_sensitive(VirtViewerWindow >> *self, gboolean sensitive); >> void virt_viewer_window_set_usb_options_sensitive(VirtViewerWindow >> *self, gboolean sensitive); >> void virt_viewer_window_set_menus_sensitive(VirtViewerWindow *self, >> gboolean sensitive); >> void virt_viewer_window_update_title(VirtViewerWindow *self); > > _______________________________________________ > virt-tools-list mailing list > virt-tools-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/virt-tools-list -- Fabiano Fidêncio _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list