[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: Compiz Fusion?



dragoran wrote:
Hikaru Amano wrote:
back to topic ,

I just rewrote desktop-effects in .py to make use compizconfig-python ..

attached them together with this email ..

attached a version with the error dialog (left the nvidia stuff for now).
whats still mising is support for gettext (translations)

resend with typo fixed.
#!/usr/bin/env python
# Re implementation of desktop-effects in pyglade
# and compizconfig-python
# Author(s): KageSenshi
#
# TODO
# get Timeout working with the timeout_dialog
# create an error dialog when compiz failed to start

import gtk
import gtk.glade
import sys
import gconf
from os import system,path
import compizconfig
from subprocess import Popen
from commands import getoutput
from time import sleep

context=compizconfig.Context()
context.Read()
WINDOW_MANAGER_KEY='/apps/gnome-session/rh/window_manager'
decorator='gtk-window-decorator --replace'

# xml = gtk.glade.XML("/usr/share/compiz/desktop-effects.glade")
xml = gtk.glade.XML("desktop-effects.glade")

################### Compiz Launcher #######################
### codes borrowed*cough*stolen*cough* from fusion-icon ###
# Author(s): crdlb

def env_intel():
    if not getoutput('xvinfo 2>/dev/null|grep Intel') == '':
        print '* intel found, exporting: INTEL_BATCH=1'
        return 'INTEL_BATCH=1 '
    else: return ''

def is_always_indirect():
    if int(getoutput('glxinfo 2>/dev/null | grep GLX_EXT_texture_from_pixmap -c')) < 3:
        if int(getoutput('LIBGL_ALWAYS_INDIRECT=1 glxinfo 2>/dev/null | grep GLX_EXT_texture_from_pixmap -c')) == 3:
           return True

def env_indirect():
    if is_always_indirect():
        print '* No GLX_EXT_texture_from_pixmap present with direct rendering context'
        print '... present with indirect rendering, exporting: LIBGL_ALWAYS_INDIRECT=1'
        return 'LIBGL_ALWAYS_INDIRECT=1 '
    else: return ''

def env_fglrx():    
    if path.exists('/usr/lib/fglrx/libGL.so.1.2.xlibmesa'):
        print '* fglrx found, exporting: LD_PRELOAD=/usr/lib/fglrx/libGL.so.1.2.xlibmesa'
        return 'LD_PRELOAD=/usr/lib/fglrx/libGL.so.1.2.xlibmesa '
    else: return ''
    
def env_nvidia():
    if not getoutput('xdpyinfo 2>/dev/null|grep NV-GLX') == '':
        print '* nvidia found, exporting: __GL_YIELD=nothing '
        return '__GL_YIELD=nothing '
    else: return ''

def get_env():
    return env_intel() + env_indirect() + env_fglrx() + env_nvidia()

def start_compiz():
    # Get Env Variables                                                                
    env_variables = get_env()
    # Start Compiz WM
    system('killall gtk-window-decorator kde-window-decorator emerald')
    decoplugin=context.Plugins['decoration']
    if not decoplugin.Enabled:
        context.ProcessEvents()
        decoplugin.Enabled = True
        context.Write()
    #sleep(2)
    
    direct_rendering = ""
    if system('pgrep Xgl') == 0: direct_rendering="--direct-rendering"
    run_compiz = env_variables + 'compiz --replace --sm-disable --ignore-desktop-hints ccp ' + direct_rendering
    print run_compiz
    Popen(decorator,shell=True)
    return Popen(run_compiz, shell=True)
    
############################# EOF Borrowed Code #############################

def start_metacity():
    run_wm = 'metacity --replace'
    Popen(run_wm, shell=True)

def cancel_compiz(widget):
    start_metacity()
    gconfclient.set_string(WINDOW_MANAGER_KEY,'metacity')
    timeout_dialog.hide()

def save_settings(widget):
    gconfclient.set_string(WINDOW_MANAGER_KEY,'compiz')
    timeout_dialog.hide()

def on_timeout_dialog_close(widget,arg2):
    widget.hide()
    print arg2
    return True

def gtk_main_quit(widget):
    sys.exit(0)

def on_cube_checkbox_toggled(widget):
    context.Read()
    context.ProcessEvents()
    if cube_checkbox.get_active():
       context.Plugins['cube'].Enabled = True
       context.Plugins['rotate'].Enabled = True
    else:
       context.Plugins['rotate'].Enabled = False
       context.Plugins['cube'].Enabled = False 
       # Bug?. For some reasons, cube is still loaded
    context.Write()

def on_enable_togglebutton_toggled(widget):
    
    print widget.get_active()
    if widget.get_active() == False:
       if system('pgrep compiz') == 0:
          start_metacity()
       if gconfclient.get_string(WINDOW_MANAGER_KEY) == 'compiz': 
          gconfclient.set_string(WINDOW_MANAGER_KEY,'metacity')
       wobble_checkbox.set_sensitive(False)
       cube_checkbox.set_sensitive(False)
    else:
       wobble_checkbox.set_sensitive(True)
       cube_checkbox.set_sensitive(True)
       process = start_compiz()
       procpoll = None
       for i in range(0,5):
           sleep(1)
           procpoll = process.poll()
       if not procpoll:
           timeout_dialog.show()
       else:
           dialog = gtk.MessageDialog(xml.get_widget('dialog'), gtk.DIALOG_DESTROY_WITH_PARENT,
           gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, "Desktop effects could not be enabled")
    	   dialog.run()
   	   dialog.destroy()

def on_wobble_checkbox_toggled(widget):
    context.Read()
    context.ProcessEvents()
    if wobble_checkbox.get_active(): context.Plugins['wobbly'].Enabled = True
    else: context.Plugins['wobbly'].Enabled = False
    context.Write()

# main 

enable_togglebutton = xml.get_widget('enable_togglebutton')
cube_checkbox = xml.get_widget('cube_checkbox')
wobble_checkbox = xml.get_widget('wobble_checkbox')
timeout_dialog = xml.get_widget('timeout_dialog')


gconfclient = gconf.client_get_default ()
startup_enabled=False

if gconfclient.get_string(WINDOW_MANAGER_KEY) == 'compiz':
   startup_enabled = True


if not startup_enabled:
   enable_togglebutton.set_active(False)
   cube_checkbox.set_sensitive(False)
   wobble_checkbox.set_sensitive(False)
else:
   enable_togglebutton.set_active(True)

if context.Plugins['rotate'].Enabled && context.Plugins['cube'].Enabled: cube_checkbox.set_active(True)
if context.Plugins['wobbly'].Enabled: wobble_checkbox.set_active(True)

signaldict={
  'on_cube_checkbox_toggled' : on_cube_checkbox_toggled,
  'on_enable_togglebutton_toggled' : on_enable_togglebutton_toggled,
  'on_wobble_checkbox_toggled' : on_wobble_checkbox_toggled,
  'gtk_main_quit' : gtk_main_quit,
  'on_timeout_dialog_close' : on_timeout_dialog_close,
  'cancel_compiz' : cancel_compiz,
  'save_settings' : save_settings,
}
xml.signal_autoconnect(signaldict)

gtk.main()


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]