00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00026
00027
00028
00029
00030
00031
00032
00033
00034 #include <config.h>
00035
00036 #include <fcntl.h>
00037 #include <stdio.h>
00038 #include <sys/ioctl.h>
00039 #include <sys/stat.h>
00040 #include <sys/types.h>
00041
00042 #include <gtk/gtk.h>
00043 #include <gdk/gdkx.h>
00044
00045 #include <liberdm/erdm.h>
00046
00047 #include "contentListerLog.h"
00048 #include "displayUpdate.h"
00049 #include "erbusy.h"
00050
00051
00052 static int g_currentLevel = LOWEST_LEVEL;
00053
00054
00055
00056
00064 gboolean display_update_during_idle_handling(gpointer data)
00065 {
00066 int level = (int) data;
00067
00068 CL_SCREENPRINTF("__CONTENTLISTER - request screen update (%d)__", level);
00069
00070 CL_TIMEDISPLAY("Before gdk_flush()");
00071
00072
00073 gdk_threads_enter();
00074 gdk_flush();
00075 gdk_threads_leave();
00076
00077 erbusy_off();
00078
00079 if (level <= LIST_ITEM_FOCUS_LEVEL)
00080 {
00081 CL_TIMEDISPLAY("Before dmDisplay (dmQBW)");
00082 dmDisplay(dmCmdPriorUrgent, dmQBW);
00083 }
00084 else if (level <= TEXTENTRY_CHANGED_LEVEL)
00085 {
00086 CL_TIMEDISPLAY("Before dmDisplay (dmQTyping)");
00087 dmDisplay(dmCmdPriorUrgent, dmQTyping);
00088 }
00089 else if (level <= MAIN_WINDOW_EXPOSE_LEVEL)
00090 {
00091 CL_TIMEDISPLAY("Before dmDisplay (dmQFull)");
00092 dmDisplay(dmCmdPriorHigh, dmQFull);
00093 }
00094 else
00095 {
00096 CL_TIMEDISPLAY("Before dmDisplay (dmQFull, low-priority)");
00097 dmDisplay(dmCmdPriorLow, dmQFull);
00098 }
00099
00100
00101 g_currentLevel = LOWEST_LEVEL;
00102
00103
00104 return FALSE;
00105 }
00106
00107 #undef display_update_request_screen_refresh
00108 gboolean display_update_request_screen_refresh(int level)
00109 {
00110 CL_SCREENPRINTF("entry level %d currentlevel %d", level, g_currentLevel);
00111
00112 if (level >= g_currentLevel)
00113 {
00114 CL_TIMEDISPLAY("Before adding idle callback");
00115
00116 gtk_idle_add(display_update_during_idle_handling, (gpointer) level);
00117
00118 g_currentLevel = level + 1;
00119 }
00120 CL_SCREENPRINTF("leave level %d currentlevel %d", level, g_currentLevel);
00121 return TRUE;
00122 }
00123
00124 int display_update_get_level(void)
00125 {
00126 return g_currentLevel;
00127 }
00128
00129
00130 #undef display_update_increase_level
00131 void display_update_increase_level(int level)
00132 {
00133 CL_SCREENPRINTF("new level %d - currentlevel %d", level, g_currentLevel);
00134
00135 if (level > g_currentLevel)
00136 {
00137 g_currentLevel = level;
00138 }
00139 }
00140
00141
00142 #undef display_update_decrease_level
00143 void display_update_decrease_level(int level)
00144 {
00145 CL_SCREENPRINTF("new level %d - currentlevel %d", level, g_currentLevel);
00146
00147 if (level < g_currentLevel)
00148 {
00149 g_currentLevel = level;
00150 }
00151 }
00152