Skip to content

Commit 974b13d

Browse files
committed
Merge branch 'composite-automatic'
* composite-automatic: gui-agent: switch to automatic composition mode, fix in-vm screenshots
2 parents 3c9f6e6 + 3187ffb commit 974b13d

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

gui-agent/vmside.c

+18-4
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ struct _global_handles {
8686
unsigned int clipboard_data_len;
8787
int log_level;
8888
int sync_all_modifiers;
89+
int composite_redirect_automatic;
8990
};
9091

9192
struct window_data {
@@ -1943,11 +1944,12 @@ void handle_guid_disconnect()
19431944

19441945
void usage()
19451946
{
1946-
fprintf(stderr, "Usage: qubes_gui [-v] [-q] [-h]\n");
1947+
fprintf(stderr, "Usage: qubes_gui [options]\n");
19471948
fprintf(stderr, " -v increase log verbosity\n");
19481949
fprintf(stderr, " -q decrease log verbosity\n");
19491950
fprintf(stderr, " -m sync all modifiers before key event (default)\n");
19501951
fprintf(stderr, " -M sync only Caps Lock key event\n");
1952+
fprintf(stderr, " -c turn off composite \"redirect automatic\" mode\n");
19511953
fprintf(stderr, " -h print this message\n");
19521954
fprintf(stderr, "\n");
19531955
fprintf(stderr, "Log levels:\n");
@@ -1963,7 +1965,8 @@ void parse_args(Ghandles * g, int argc, char **argv)
19631965
// defaults
19641966
g->log_level = 0;
19651967
g->sync_all_modifiers = 1;
1966-
while ((opt = getopt(argc, argv, "qvhmM")) != -1) {
1968+
g->composite_redirect_automatic = 1;
1969+
while ((opt = getopt(argc, argv, "qvchmM")) != -1) {
19671970
switch (opt) {
19681971
case 'q':
19691972
g->log_level--;
@@ -1977,6 +1980,9 @@ void parse_args(Ghandles * g, int argc, char **argv)
19771980
case 'M':
19781981
g->sync_all_modifiers = 0;
19791982
break;
1983+
case 'c':
1984+
g->composite_redirect_automatic = 0;
1985+
break;
19801986
case 'h':
19811987
usage();
19821988
exit(0);
@@ -2013,11 +2019,19 @@ int main(int argc, char **argv)
20132019
mkghandles(&g);
20142020
ghandles_for_vchan_reinitialize = &g;
20152021
parse_args(&g, argc, argv);
2022+
/* Turn on Composite for all children of root window. This way X server
2023+
* keeps separate buffers for each (root child) window.
2024+
* There are two modes:
2025+
* - manual - this way only off-screen buffers are maintained
2026+
* - automatic - in addition to manual, widows are rendered back to the
2027+
* root window
2028+
*/
20162029
for (i = 0; i < ScreenCount(g.display); i++)
20172030
XCompositeRedirectSubwindows(g.display,
20182031
RootWindow(g.display, i),
2019-
// CompositeRedirectAutomatic);
2020-
CompositeRedirectManual);
2032+
(g.composite_redirect_automatic ?
2033+
CompositeRedirectAutomatic :
2034+
CompositeRedirectManual));
20212035
for (i = 0; i < ScreenCount(g.display); i++)
20222036
XSelectInput(g.display, RootWindow(g.display, i),
20232037
SubstructureNotifyMask);

0 commit comments

Comments
 (0)