@@ -86,6 +86,7 @@ struct _global_handles {
86
86
unsigned int clipboard_data_len ;
87
87
int log_level ;
88
88
int sync_all_modifiers ;
89
+ int composite_redirect_automatic ;
89
90
};
90
91
91
92
struct window_data {
@@ -1943,11 +1944,12 @@ void handle_guid_disconnect()
1943
1944
1944
1945
void usage ()
1945
1946
{
1946
- fprintf (stderr , "Usage: qubes_gui [-v] [-q] [-h ]\n" );
1947
+ fprintf (stderr , "Usage: qubes_gui [options ]\n" );
1947
1948
fprintf (stderr , " -v increase log verbosity\n" );
1948
1949
fprintf (stderr , " -q decrease log verbosity\n" );
1949
1950
fprintf (stderr , " -m sync all modifiers before key event (default)\n" );
1950
1951
fprintf (stderr , " -M sync only Caps Lock key event\n" );
1952
+ fprintf (stderr , " -c turn off composite \"redirect automatic\" mode\n" );
1951
1953
fprintf (stderr , " -h print this message\n" );
1952
1954
fprintf (stderr , "\n" );
1953
1955
fprintf (stderr , "Log levels:\n" );
@@ -1963,7 +1965,8 @@ void parse_args(Ghandles * g, int argc, char **argv)
1963
1965
// defaults
1964
1966
g -> log_level = 0 ;
1965
1967
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 ) {
1967
1970
switch (opt ) {
1968
1971
case 'q' :
1969
1972
g -> log_level -- ;
@@ -1977,6 +1980,9 @@ void parse_args(Ghandles * g, int argc, char **argv)
1977
1980
case 'M' :
1978
1981
g -> sync_all_modifiers = 0 ;
1979
1982
break ;
1983
+ case 'c' :
1984
+ g -> composite_redirect_automatic = 0 ;
1985
+ break ;
1980
1986
case 'h' :
1981
1987
usage ();
1982
1988
exit (0 );
@@ -2013,11 +2019,19 @@ int main(int argc, char **argv)
2013
2019
mkghandles (& g );
2014
2020
ghandles_for_vchan_reinitialize = & g ;
2015
2021
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
+ */
2016
2029
for (i = 0 ; i < ScreenCount (g .display ); i ++ )
2017
2030
XCompositeRedirectSubwindows (g .display ,
2018
2031
RootWindow (g .display , i ),
2019
- // CompositeRedirectAutomatic);
2020
- CompositeRedirectManual );
2032
+ (g .composite_redirect_automatic ?
2033
+ CompositeRedirectAutomatic :
2034
+ CompositeRedirectManual ));
2021
2035
for (i = 0 ; i < ScreenCount (g .display ); i ++ )
2022
2036
XSelectInput (g .display , RootWindow (g .display , i ),
2023
2037
SubstructureNotifyMask );
0 commit comments