Merge lp:~canonical-dx-team/unity/unity.spec-conformance into lp:unity
- unity.spec-conformance
- Merge into trunk
Proposed by
Jason Smith
on 2010-12-20
| Status: | Merged |
|---|---|
| Merged at revision: | 730 |
| Proposed branch: | lp:~canonical-dx-team/unity/unity.spec-conformance |
| Merge into: | lp:unity |
| Diff against target: |
1252 lines (+409/-216) 13 files modified
po/unity.pot (+1/-1) src/BamfLauncherIcon.cpp (+13/-13) src/Launcher.cpp (+154/-66) src/Launcher.h (+37/-8) src/LauncherController.cpp (+5/-5) src/LauncherIcon.cpp (+28/-25) src/LauncherIcon.h (+44/-42) src/LauncherModel.cpp (+1/-1) src/QuicklistMenuItemRadio.cpp (+1/-1) src/TrashLauncherIcon.cpp (+15/-3) src/TrashLauncherIcon.h (+3/-0) src/unityshell.cpp (+16/-4) unityshell.xml.in (+91/-47) |
| To merge this branch: | bzr merge lp:~canonical-dx-team/unity/unity.spec-conformance |
| Related bugs: |
| Reviewer | Review Type | Date Requested | Status |
|---|---|---|---|
| Alex Launi (community) | 2010-12-20 | Approve on 2010-12-20 | |
|
Review via email:
|
|||
Commit Message
Description of the Change
Adds options to implement all different features I could find proposed.
To post a comment you must log in.
lp:~canonical-dx-team/unity/unity.spec-conformance
updated
on 2010-12-22
- 732. By Jason Smith on 2010-12-22
-
Change defaults
- 733. By Jason Smith on 2010-12-22
-
implement urgent wiggle animation
- 734. By Jason Smith on 2010-12-22
-
Use C++ style scoping for enums rather than C style enums
- 735. By Jason Smith on 2010-12-22
-
black trash
- 736. By Jason Smith on 2010-12-22
-
ensure super short lived windows do not result in a jumpy animation
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
| 1 | === modified file 'po/unity.pot' |
| 2 | --- po/unity.pot 2010-12-15 16:16:09 +0000 |
| 3 | +++ po/unity.pot 2010-12-22 01:51:30 +0000 |
| 4 | @@ -8,7 +8,7 @@ |
| 5 | msgstr "" |
| 6 | "Project-Id-Version: PACKAGE VERSION\n" |
| 7 | "Report-Msgid-Bugs-To: ayatana-dev@lists.launchpad.net\n" |
| 8 | -"POT-Creation-Date: 2010-12-15 16:03+0000\n" |
| 9 | +"POT-Creation-Date: 2010-12-17 19:24-0500\n" |
| 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
| 11 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
| 12 | "Language-Team: LANGUAGE <LL@li.org>\n" |
| 13 | |
| 14 | === modified file 'src/BamfLauncherIcon.cpp' |
| 15 | --- src/BamfLauncherIcon.cpp 2010-12-17 10:03:18 +0000 |
| 16 | +++ src/BamfLauncherIcon.cpp 2010-12-22 01:51:30 +0000 |
| 17 | @@ -59,15 +59,15 @@ |
| 18 | |
| 19 | SetTooltipText (bamf_view_get_name (BAMF_VIEW (app))); |
| 20 | SetIconName (icon_name); |
| 21 | - SetIconType (LAUNCHER_ICON_TYPE_APPLICATION); |
| 22 | + SetIconType (TYPE_APPLICATION); |
| 23 | |
| 24 | if (bamf_view_is_sticky (BAMF_VIEW (m_App))) |
| 25 | - SetQuirk (LAUNCHER_ICON_QUIRK_VISIBLE, true); |
| 26 | + SetQuirk (QUIRK_VISIBLE, true); |
| 27 | else |
| 28 | - SetQuirk (LAUNCHER_ICON_QUIRK_VISIBLE, bamf_view_user_visible (BAMF_VIEW (m_App))); |
| 29 | + SetQuirk (QUIRK_VISIBLE, bamf_view_user_visible (BAMF_VIEW (m_App))); |
| 30 | |
| 31 | - SetQuirk (LAUNCHER_ICON_QUIRK_ACTIVE, bamf_view_is_active (BAMF_VIEW (m_App))); |
| 32 | - SetQuirk (LAUNCHER_ICON_QUIRK_RUNNING, bamf_view_is_running (BAMF_VIEW (m_App))); |
| 33 | + SetQuirk (QUIRK_ACTIVE, bamf_view_is_active (BAMF_VIEW (m_App))); |
| 34 | + SetQuirk (QUIRK_RUNNING, bamf_view_is_running (BAMF_VIEW (m_App))); |
| 35 | |
| 36 | g_free (icon_name); |
| 37 | |
| 38 | @@ -110,7 +110,7 @@ |
| 39 | return; |
| 40 | |
| 41 | Present (0.5f, 600); |
| 42 | - UpdateQuirkTimeDelayed (300, LAUNCHER_ICON_QUIRK_SHIMMER); |
| 43 | + UpdateQuirkTimeDelayed (300, QUIRK_SHIMMER); |
| 44 | } |
| 45 | |
| 46 | bool |
| 47 | @@ -197,7 +197,7 @@ |
| 48 | g_error_free (error); |
| 49 | } |
| 50 | |
| 51 | - UpdateQuirkTime (LAUNCHER_ICON_QUIRK_STARTING); |
| 52 | + UpdateQuirkTime (QUIRK_STARTING); |
| 53 | } |
| 54 | |
| 55 | void |
| 56 | @@ -353,9 +353,9 @@ |
| 57 | |
| 58 | if (!running) |
| 59 | { |
| 60 | - if (GetQuirk (LAUNCHER_ICON_QUIRK_STARTING)) |
| 61 | + if (GetQuirk (QUIRK_STARTING)) |
| 62 | return; |
| 63 | - SetQuirk (LAUNCHER_ICON_QUIRK_STARTING, true); |
| 64 | + SetQuirk (QUIRK_STARTING, true); |
| 65 | OpenInstance (); |
| 66 | return; |
| 67 | } |
| 68 | @@ -380,14 +380,14 @@ |
| 69 | BamfLauncherIcon *self = (BamfLauncherIcon *) data; |
| 70 | |
| 71 | if (!bamf_view_is_sticky (BAMF_VIEW (self->m_App))) |
| 72 | - self->SetQuirk (LAUNCHER_ICON_QUIRK_VISIBLE, visible); |
| 73 | + self->SetQuirk (QUIRK_VISIBLE, visible); |
| 74 | } |
| 75 | |
| 76 | void |
| 77 | BamfLauncherIcon::OnRunningChanged (BamfView *view, gboolean running, gpointer data) |
| 78 | { |
| 79 | BamfLauncherIcon *self = (BamfLauncherIcon *) data; |
| 80 | - self->SetQuirk (LAUNCHER_ICON_QUIRK_RUNNING, running); |
| 81 | + self->SetQuirk (QUIRK_RUNNING, running); |
| 82 | |
| 83 | if (running) |
| 84 | { |
| 85 | @@ -400,14 +400,14 @@ |
| 86 | BamfLauncherIcon::OnActiveChanged (BamfView *view, gboolean active, gpointer data) |
| 87 | { |
| 88 | BamfLauncherIcon *self = (BamfLauncherIcon *) data; |
| 89 | - self->SetQuirk (LAUNCHER_ICON_QUIRK_ACTIVE, active); |
| 90 | + self->SetQuirk (QUIRK_ACTIVE, active); |
| 91 | } |
| 92 | |
| 93 | void |
| 94 | BamfLauncherIcon::OnUrgentChanged (BamfView *view, gboolean urgent, gpointer data) |
| 95 | { |
| 96 | BamfLauncherIcon *self = (BamfLauncherIcon *) data; |
| 97 | - self->SetQuirk (LAUNCHER_ICON_QUIRK_URGENT, urgent); |
| 98 | + self->SetQuirk (QUIRK_URGENT, urgent); |
| 99 | } |
| 100 | |
| 101 | void |
| 102 | |
| 103 | === modified file 'src/Launcher.cpp' |
| 104 | --- src/Launcher.cpp 2010-12-17 11:49:38 +0000 |
| 105 | +++ src/Launcher.cpp 2010-12-22 01:51:30 +0000 |
| 106 | @@ -38,11 +38,8 @@ |
| 107 | #include "QuicklistManager.h" |
| 108 | #include "QuicklistView.h" |
| 109 | |
| 110 | -#define ANIM_DURATION_SHORT 125 |
| 111 | -#define ANIM_DURATION 200 |
| 112 | -#define ANIM_DURATION_LONG 350 |
| 113 | - |
| 114 | #define URGENT_BLINKS 3 |
| 115 | +#define WIGGLE_CYCLES 6 |
| 116 | |
| 117 | #define MAX_STARTING_BLINKS 5 |
| 118 | #define STARTING_BLINK_LAMBDA 3 |
| 119 | @@ -240,8 +237,9 @@ |
| 120 | _launcher_top_y = 0; |
| 121 | _launcher_bottom_y = 0; |
| 122 | _folded_z_distance = 10.0f; |
| 123 | - _launcher_state = LAUNCHER_FOLDED; |
| 124 | _launcher_action_state = ACTION_NONE; |
| 125 | + _launch_animation = LAUNCH_ANIMATION_NONE; |
| 126 | + _urgent_animation = URGENT_ANIMATION_NONE; |
| 127 | _icon_under_mouse = NULL; |
| 128 | _icon_mouse_down = NULL; |
| 129 | _drag_icon = NULL; |
| 130 | @@ -271,6 +269,8 @@ |
| 131 | _mouse_inside_trigger = false; |
| 132 | _window_over_launcher = false; |
| 133 | _render_drag_window = false; |
| 134 | + _backlight_always_on = false; |
| 135 | + |
| 136 | |
| 137 | // 0 out timers to avoid wonky startups |
| 138 | _enter_time.tv_sec = 0; |
| 139 | @@ -390,35 +390,35 @@ |
| 140 | |
| 141 | bool Launcher::IconNeedsAnimation (LauncherIcon *icon, struct timespec const ¤t) |
| 142 | { |
| 143 | - struct timespec time = icon->GetQuirkTime (LAUNCHER_ICON_QUIRK_VISIBLE); |
| 144 | - if (TimeDelta (¤t, &time) < ANIM_DURATION_SHORT) |
| 145 | - return true; |
| 146 | - |
| 147 | - time = icon->GetQuirkTime (LAUNCHER_ICON_QUIRK_RUNNING); |
| 148 | - if (TimeDelta (¤t, &time) < ANIM_DURATION_SHORT) |
| 149 | - return true; |
| 150 | - |
| 151 | - time = icon->GetQuirkTime (LAUNCHER_ICON_QUIRK_STARTING); |
| 152 | + struct timespec time = icon->GetQuirkTime (LauncherIcon::QUIRK_VISIBLE); |
| 153 | + if (TimeDelta (¤t, &time) < ANIM_DURATION_SHORT) |
| 154 | + return true; |
| 155 | + |
| 156 | + time = icon->GetQuirkTime (LauncherIcon::QUIRK_RUNNING); |
| 157 | + if (TimeDelta (¤t, &time) < ANIM_DURATION_SHORT) |
| 158 | + return true; |
| 159 | + |
| 160 | + time = icon->GetQuirkTime (LauncherIcon::QUIRK_STARTING); |
| 161 | if (TimeDelta (¤t, &time) < (ANIM_DURATION_LONG * MAX_STARTING_BLINKS * STARTING_BLINK_LAMBDA * 2)) |
| 162 | return true; |
| 163 | |
| 164 | - time = icon->GetQuirkTime (LAUNCHER_ICON_QUIRK_URGENT); |
| 165 | + time = icon->GetQuirkTime (LauncherIcon::QUIRK_URGENT); |
| 166 | if (TimeDelta (¤t, &time) < (ANIM_DURATION_LONG * URGENT_BLINKS * 2)) |
| 167 | return true; |
| 168 | |
| 169 | - time = icon->GetQuirkTime (LAUNCHER_ICON_QUIRK_PRESENTED); |
| 170 | + time = icon->GetQuirkTime (LauncherIcon::QUIRK_PRESENTED); |
| 171 | if (TimeDelta (¤t, &time) < ANIM_DURATION) |
| 172 | return true; |
| 173 | |
| 174 | - time = icon->GetQuirkTime (LAUNCHER_ICON_QUIRK_SHIMMER); |
| 175 | + time = icon->GetQuirkTime (LauncherIcon::QUIRK_SHIMMER); |
| 176 | if (TimeDelta (¤t, &time) < ANIM_DURATION_LONG) |
| 177 | return true; |
| 178 | |
| 179 | - time = icon->GetQuirkTime (LAUNCHER_ICON_QUIRK_CENTER_SAVED); |
| 180 | + time = icon->GetQuirkTime (LauncherIcon::QUIRK_CENTER_SAVED); |
| 181 | if (TimeDelta (¤t, &time) < ANIM_DURATION) |
| 182 | return true; |
| 183 | |
| 184 | - time = icon->GetQuirkTime (LAUNCHER_ICON_QUIRK_PROGRESS); |
| 185 | + time = icon->GetQuirkTime (LauncherIcon::QUIRK_PROGRESS); |
| 186 | if (TimeDelta (¤t, &time) < ANIM_DURATION) |
| 187 | return true; |
| 188 | |
| 189 | @@ -495,15 +495,15 @@ |
| 190 | |
| 191 | float IconVisibleProgress (LauncherIcon *icon, struct timespec const ¤t) |
| 192 | { |
| 193 | - if (icon->GetQuirk (LAUNCHER_ICON_QUIRK_VISIBLE)) |
| 194 | + if (icon->GetQuirk (LauncherIcon::QUIRK_VISIBLE)) |
| 195 | { |
| 196 | - struct timespec icon_visible_time = icon->GetQuirkTime (LAUNCHER_ICON_QUIRK_VISIBLE); |
| 197 | + struct timespec icon_visible_time = icon->GetQuirkTime (LauncherIcon::QUIRK_VISIBLE); |
| 198 | int enter_ms = TimeDelta (¤t, &icon_visible_time); |
| 199 | return CLAMP ((float) enter_ms / (float) ANIM_DURATION_SHORT, 0.0f, 1.0f); |
| 200 | } |
| 201 | else |
| 202 | { |
| 203 | - struct timespec icon_hide_time = icon->GetQuirkTime (LAUNCHER_ICON_QUIRK_VISIBLE); |
| 204 | + struct timespec icon_hide_time = icon->GetQuirkTime (LauncherIcon::QUIRK_VISIBLE); |
| 205 | int hide_ms = TimeDelta (¤t, &icon_hide_time); |
| 206 | return 1.0f - CLAMP ((float) hide_ms / (float) ANIM_DURATION_SHORT, 0.0f, 1.0f); |
| 207 | } |
| 208 | @@ -537,11 +537,11 @@ |
| 209 | |
| 210 | float Launcher::IconPresentProgress (LauncherIcon *icon, struct timespec const ¤t) |
| 211 | { |
| 212 | - struct timespec icon_present_time = icon->GetQuirkTime (LAUNCHER_ICON_QUIRK_PRESENTED); |
| 213 | + struct timespec icon_present_time = icon->GetQuirkTime (LauncherIcon::QUIRK_PRESENTED); |
| 214 | int ms = TimeDelta (¤t, &icon_present_time); |
| 215 | float result = CLAMP ((float) ms / (float) ANIM_DURATION, 0.0f, 1.0f); |
| 216 | |
| 217 | - if (icon->GetQuirk (LAUNCHER_ICON_QUIRK_PRESENTED)) |
| 218 | + if (icon->GetQuirk (LauncherIcon::QUIRK_PRESENTED)) |
| 219 | return result; |
| 220 | else |
| 221 | return 1.0f - result; |
| 222 | @@ -549,11 +549,16 @@ |
| 223 | |
| 224 | float Launcher::IconUrgentProgress (LauncherIcon *icon, struct timespec const ¤t) |
| 225 | { |
| 226 | - struct timespec urgent_time = icon->GetQuirkTime (LAUNCHER_ICON_QUIRK_URGENT); |
| 227 | + struct timespec urgent_time = icon->GetQuirkTime (LauncherIcon::QUIRK_URGENT); |
| 228 | int urgent_ms = TimeDelta (¤t, &urgent_time); |
| 229 | - float result = CLAMP ((float) urgent_ms / (float) (ANIM_DURATION_LONG * URGENT_BLINKS * 2), 0.0f, 1.0f); |
| 230 | + float result; |
| 231 | + |
| 232 | + if (_urgent_animation == URGENT_ANIMATION_WIGGLE) |
| 233 | + result = CLAMP ((float) urgent_ms / (float) (ANIM_DURATION_SHORT * WIGGLE_CYCLES), 0.0f, 1.0f); |
| 234 | + else |
| 235 | + result = CLAMP ((float) urgent_ms / (float) (ANIM_DURATION_LONG * URGENT_BLINKS * 2), 0.0f, 1.0f); |
| 236 | |
| 237 | - if (icon->GetQuirk (LAUNCHER_ICON_QUIRK_URGENT)) |
| 238 | + if (icon->GetQuirk (LauncherIcon::QUIRK_URGENT)) |
| 239 | return result; |
| 240 | else |
| 241 | return 1.0f - result; |
| 242 | @@ -561,83 +566,117 @@ |
| 243 | |
| 244 | float Launcher::IconShimmerProgress (LauncherIcon *icon, struct timespec const ¤t) |
| 245 | { |
| 246 | - struct timespec shimmer_time = icon->GetQuirkTime (LAUNCHER_ICON_QUIRK_SHIMMER); |
| 247 | + struct timespec shimmer_time = icon->GetQuirkTime (LauncherIcon::QUIRK_SHIMMER); |
| 248 | int shimmer_ms = TimeDelta (¤t, &shimmer_time); |
| 249 | return CLAMP ((float) shimmer_ms / (float) ANIM_DURATION_LONG, 0.0f, 1.0f); |
| 250 | } |
| 251 | |
| 252 | float Launcher::IconCenterTransitionProgress (LauncherIcon *icon, struct timespec const ¤t) |
| 253 | { |
| 254 | - struct timespec save_time = icon->GetQuirkTime (LAUNCHER_ICON_QUIRK_CENTER_SAVED); |
| 255 | + struct timespec save_time = icon->GetQuirkTime (LauncherIcon::QUIRK_CENTER_SAVED); |
| 256 | int save_ms = TimeDelta (¤t, &save_time); |
| 257 | return CLAMP ((float) save_ms / (float) ANIM_DURATION, 0.0f, 1.0f); |
| 258 | } |
| 259 | |
| 260 | float Launcher::IconUrgentPulseValue (LauncherIcon *icon, struct timespec const ¤t) |
| 261 | { |
| 262 | - if (!icon->GetQuirk (LAUNCHER_ICON_QUIRK_URGENT)) |
| 263 | + if (!icon->GetQuirk (LauncherIcon::QUIRK_URGENT)) |
| 264 | return 1.0f; // we are full on in a normal condition |
| 265 | |
| 266 | double urgent_progress = (double) IconUrgentProgress (icon, current); |
| 267 | return 0.5f + (float) (std::cos (M_PI * (float) (URGENT_BLINKS * 2) * urgent_progress)) * 0.5f; |
| 268 | } |
| 269 | |
| 270 | +float Launcher::IconUrgentWiggleValue (LauncherIcon *icon, struct timespec const ¤t) |
| 271 | +{ |
| 272 | + if (!icon->GetQuirk (LauncherIcon::QUIRK_URGENT)) |
| 273 | + return 0.0f; // we are full on in a normal condition |
| 274 | + |
| 275 | + double urgent_progress = (double) IconUrgentProgress (icon, current); |
| 276 | + return 0.3f * (float) (std::sin (M_PI * (float) (WIGGLE_CYCLES * 2) * urgent_progress)) * 0.5f; |
| 277 | +} |
| 278 | + |
| 279 | +float Launcher::IconStartingBlinkValue (LauncherIcon *icon, struct timespec const ¤t) |
| 280 | +{ |
| 281 | + struct timespec starting_time = icon->GetQuirkTime (LauncherIcon::QUIRK_STARTING); |
| 282 | + int starting_ms = TimeDelta (¤t, &starting_time); |
| 283 | + double starting_progress = (double) CLAMP ((float) starting_ms / (float) (ANIM_DURATION_LONG * STARTING_BLINK_LAMBDA), 0.0f, 1.0f); |
| 284 | + return 0.5f + (float) (std::cos (M_PI * (_backlight_always_on ? 4.0f : 3.0f) * starting_progress)) * 0.5f; |
| 285 | +} |
| 286 | + |
| 287 | float Launcher::IconStartingPulseValue (LauncherIcon *icon, struct timespec const ¤t) |
| 288 | { |
| 289 | - struct timespec starting_time = icon->GetQuirkTime (LAUNCHER_ICON_QUIRK_STARTING); |
| 290 | + struct timespec starting_time = icon->GetQuirkTime (LauncherIcon::QUIRK_STARTING); |
| 291 | int starting_ms = TimeDelta (¤t, &starting_time); |
| 292 | double starting_progress = (double) CLAMP ((float) starting_ms / (float) (ANIM_DURATION_LONG * MAX_STARTING_BLINKS * STARTING_BLINK_LAMBDA * 2), 0.0f, 1.0f); |
| 293 | |
| 294 | - if (starting_progress == 1.0f && !icon->GetQuirk (LAUNCHER_ICON_QUIRK_RUNNING)) |
| 295 | + if (starting_progress == 1.0f && !icon->GetQuirk (LauncherIcon::QUIRK_RUNNING)) |
| 296 | { |
| 297 | - icon->SetQuirk (LAUNCHER_ICON_QUIRK_STARTING, false); |
| 298 | - icon->ResetQuirkTime (LAUNCHER_ICON_QUIRK_STARTING); |
| 299 | + icon->SetQuirk (LauncherIcon::QUIRK_STARTING, false); |
| 300 | + icon->ResetQuirkTime (LauncherIcon::QUIRK_STARTING); |
| 301 | } |
| 302 | |
| 303 | - return 1.0f - (0.5f + (float) (std::cos (M_PI * (float) (MAX_STARTING_BLINKS * 2) * starting_progress)) * 0.5f); |
| 304 | + return 0.5f + (float) (std::cos (M_PI * (float) (MAX_STARTING_BLINKS * 2) * starting_progress)) * 0.5f; |
| 305 | } |
| 306 | |
| 307 | float Launcher::IconBackgroundIntensity (LauncherIcon *icon, struct timespec const ¤t) |
| 308 | { |
| 309 | float result = 0.0f; |
| 310 | - struct timespec running_time = icon->GetQuirkTime (LAUNCHER_ICON_QUIRK_RUNNING); |
| 311 | + |
| 312 | + struct timespec running_time = icon->GetQuirkTime (LauncherIcon::QUIRK_RUNNING); |
| 313 | int running_ms = TimeDelta (¤t, &running_time); |
| 314 | float running_progress = CLAMP ((float) running_ms / (float) ANIM_DURATION_SHORT, 0.0f, 1.0f); |
| 315 | + |
| 316 | + if (!icon->GetQuirk (LauncherIcon::QUIRK_RUNNING)) |
| 317 | + running_progress = 1.0f - running_progress; |
| 318 | |
| 319 | // After we finish a fade in from running, we can reset the quirk |
| 320 | - if (running_progress == 1.0f && icon->GetQuirk (LAUNCHER_ICON_QUIRK_RUNNING)) |
| 321 | - { |
| 322 | - icon->SetQuirk (LAUNCHER_ICON_QUIRK_STARTING, false); |
| 323 | - icon->ResetQuirkTime (LAUNCHER_ICON_QUIRK_STARTING); |
| 324 | - } |
| 325 | - |
| 326 | - result = IconStartingPulseValue (icon, current) * BACKLIGHT_STRENGTH; |
| 327 | - |
| 328 | - if (icon->GetQuirk (LAUNCHER_ICON_QUIRK_RUNNING)) |
| 329 | - { |
| 330 | - // running progress fades in whatever the pulsing did not fill in already |
| 331 | - result += running_progress * (BACKLIGHT_STRENGTH - result); |
| 332 | - |
| 333 | - // urgent serves to bring the total down only |
| 334 | - if (icon->GetQuirk (LAUNCHER_ICON_QUIRK_URGENT)) |
| 335 | - result *= 0.2f + 0.8f * IconUrgentPulseValue (icon, current); |
| 336 | - } |
| 337 | + if (running_progress == 1.0f && icon->GetQuirk (LauncherIcon::QUIRK_RUNNING)) |
| 338 | + icon->SetQuirk (LauncherIcon::QUIRK_STARTING, false); |
| 339 | + |
| 340 | + float backlight_strength; |
| 341 | + if (_backlight_always_on) |
| 342 | + backlight_strength = BACKLIGHT_STRENGTH; |
| 343 | else |
| 344 | + backlight_strength = BACKLIGHT_STRENGTH * running_progress; |
| 345 | + |
| 346 | + switch (_launch_animation) |
| 347 | { |
| 348 | - // modestly evil |
| 349 | - result += BACKLIGHT_STRENGTH - running_progress * BACKLIGHT_STRENGTH; |
| 350 | + case LAUNCH_ANIMATION_NONE: |
| 351 | + result = backlight_strength; |
| 352 | + break; |
| 353 | + case LAUNCH_ANIMATION_BLINK: |
| 354 | + if (_backlight_always_on) |
| 355 | + result = IconStartingBlinkValue (icon, current); |
| 356 | + else |
| 357 | + result = backlight_strength; // The blink concept is a failure in this case (it just doesn't work right) |
| 358 | + break; |
| 359 | + case LAUNCH_ANIMATION_PULSE: |
| 360 | + if (running_progress == 1.0f && icon->GetQuirk (LauncherIcon::QUIRK_RUNNING)) |
| 361 | + icon->ResetQuirkTime (LauncherIcon::QUIRK_STARTING); |
| 362 | + |
| 363 | + result = backlight_strength; |
| 364 | + if (_backlight_always_on) |
| 365 | + result *= CLAMP (running_progress + IconStartingPulseValue (icon, current), 0.0f, 1.0f); |
| 366 | + else |
| 367 | + result += (BACKLIGHT_STRENGTH - result) * (1.0f - IconStartingPulseValue (icon, current)); |
| 368 | + break; |
| 369 | } |
| 370 | - |
| 371 | + |
| 372 | + // urgent serves to bring the total down only |
| 373 | + if (icon->GetQuirk (LauncherIcon::QUIRK_URGENT) && _urgent_animation == URGENT_ANIMATION_PULSE) |
| 374 | + result *= 0.2f + 0.8f * IconUrgentPulseValue (icon, current); |
| 375 | + |
| 376 | return result; |
| 377 | } |
| 378 | |
| 379 | float Launcher::IconProgressBias (LauncherIcon *icon, struct timespec const ¤t) |
| 380 | { |
| 381 | - struct timespec icon_progress_time = icon->GetQuirkTime (LAUNCHER_ICON_QUIRK_PROGRESS); |
| 382 | + struct timespec icon_progress_time = icon->GetQuirkTime (LauncherIcon::QUIRK_PROGRESS); |
| 383 | int ms = TimeDelta (¤t, &icon_progress_time); |
| 384 | float result = CLAMP ((float) ms / (float) ANIM_DURATION, 0.0f, 1.0f); |
| 385 | |
| 386 | - if (icon->GetQuirk (LAUNCHER_ICON_QUIRK_PROGRESS)) |
| 387 | + if (icon->GetQuirk (LauncherIcon::QUIRK_PROGRESS)) |
| 388 | return -1.0f + result; |
| 389 | else |
| 390 | return result; |
| 391 | @@ -647,9 +686,9 @@ |
| 392 | { |
| 393 | arg.icon = icon; |
| 394 | arg.alpha = 1.0f; |
| 395 | - arg.running_arrow = icon->GetQuirk (LAUNCHER_ICON_QUIRK_RUNNING); |
| 396 | - arg.active_arrow = icon->GetQuirk (LAUNCHER_ICON_QUIRK_ACTIVE); |
| 397 | - arg.running_colored = icon->GetQuirk (LAUNCHER_ICON_QUIRK_URGENT); |
| 398 | + arg.running_arrow = icon->GetQuirk (LauncherIcon::QUIRK_RUNNING); |
| 399 | + arg.active_arrow = icon->GetQuirk (LauncherIcon::QUIRK_ACTIVE); |
| 400 | + arg.running_colored = icon->GetQuirk (LauncherIcon::QUIRK_URGENT); |
| 401 | arg.active_colored = false; |
| 402 | arg.x_rotation = 0.0f; |
| 403 | arg.y_rotation = 0.0f; |
| 404 | @@ -660,7 +699,7 @@ |
| 405 | arg.progress = CLAMP (icon->GetProgress (), 0.0f, 1.0f); |
| 406 | |
| 407 | // we dont need to show strays |
| 408 | - if (!icon->GetQuirk (LAUNCHER_ICON_QUIRK_RUNNING)) |
| 409 | + if (!icon->GetQuirk (LauncherIcon::QUIRK_RUNNING)) |
| 410 | arg.window_indicators = 0; |
| 411 | else |
| 412 | arg.window_indicators = MIN (4, icon->RelatedWindows ()); |
| 413 | @@ -670,11 +709,16 @@ |
| 414 | |
| 415 | float urgent_progress = IconUrgentProgress (icon, current); |
| 416 | |
| 417 | - if (icon->GetQuirk (LAUNCHER_ICON_QUIRK_URGENT)) |
| 418 | + if (icon->GetQuirk (LauncherIcon::QUIRK_URGENT)) |
| 419 | urgent_progress = CLAMP (urgent_progress * 3.0f, 0.0f, 1.0f); // we want to go 3x faster than the urgent normal cycle |
| 420 | else |
| 421 | urgent_progress = CLAMP (urgent_progress * 3.0f - 2.0f, 0.0f, 1.0f); // we want to go 3x faster than the urgent normal cycle |
| 422 | arg.glow_intensity = urgent_progress; |
| 423 | + |
| 424 | + if (icon->GetQuirk (LauncherIcon::QUIRK_URGENT) && _urgent_animation == URGENT_ANIMATION_WIGGLE) |
| 425 | + { |
| 426 | + arg.z_rotation = IconUrgentWiggleValue (icon, current); |
| 427 | + } |
| 428 | } |
| 429 | |
| 430 | void Launcher::FillRenderArg (LauncherIcon *icon, |
| 431 | @@ -1037,6 +1081,50 @@ |
| 432 | EnsureAnimation (); |
| 433 | } |
| 434 | |
| 435 | +void Launcher::SetBacklightAlwaysOn (bool always_on) |
| 436 | +{ |
| 437 | + if (_backlight_always_on == always_on) |
| 438 | + return; |
| 439 | + |
| 440 | + _backlight_always_on = always_on; |
| 441 | + EnsureAnimation (); |
| 442 | +} |
| 443 | + |
| 444 | +bool Launcher::GetBacklightAlwaysOn () |
| 445 | +{ |
| 446 | + return _backlight_always_on; |
| 447 | +} |
| 448 | + |
| 449 | +void |
| 450 | +Launcher::SetLaunchAnimation (LaunchAnimation animation) |
| 451 | +{ |
| 452 | + if (_launch_animation == animation) |
| 453 | + return; |
| 454 | + |
| 455 | + _launch_animation = animation; |
| 456 | +} |
| 457 | + |
| 458 | +Launcher::LaunchAnimation |
| 459 | +Launcher::GetLaunchAnimation () |
| 460 | +{ |
| 461 | + return _launch_animation; |
| 462 | +} |
| 463 | + |
| 464 | +void |
| 465 | +Launcher::SetUrgentAnimation (UrgentAnimation animation) |
| 466 | +{ |
| 467 | + if (_urgent_animation == animation) |
| 468 | + return; |
| 469 | + |
| 470 | + _urgent_animation = animation; |
| 471 | +} |
| 472 | + |
| 473 | +Launcher::UrgentAnimation |
| 474 | +Launcher::GetUrgentAnimation () |
| 475 | +{ |
| 476 | + return _urgent_animation; |
| 477 | +} |
| 478 | + |
| 479 | void |
| 480 | Launcher::EnsureHoverState () |
| 481 | { |
| 482 | @@ -1228,7 +1316,7 @@ |
| 483 | nux::Matrix4 ProjectionMatrix; |
| 484 | nux::Matrix4 ViewProjectionMatrix; |
| 485 | |
| 486 | - if(nux::Abs (arg.x_rotation) < 0.01f) |
| 487 | + if(nux::Abs (arg.x_rotation) < 0.01f && nux::Abs (arg.y_rotation) < 0.01f && nux::Abs (arg.z_rotation) < 0.01f) |
| 488 | icon->SetFiltering(GL_NEAREST, GL_NEAREST); |
| 489 | else |
| 490 | icon->SetFiltering(GL_LINEAR, GL_LINEAR); |
| 491 | @@ -1890,7 +1978,7 @@ |
| 492 | // Because of the way icons fold and stack on one another, we must proceed in 2 steps. |
| 493 | for (rev_it = _model->rbegin (); rev_it != _model->rend (); rev_it++) |
| 494 | { |
| 495 | - if ((*rev_it)->_folding_angle < 0.0f || !(*rev_it)->GetQuirk (LAUNCHER_ICON_QUIRK_VISIBLE)) |
| 496 | + if ((*rev_it)->_folding_angle < 0.0f || !(*rev_it)->GetQuirk (LauncherIcon::QUIRK_VISIBLE)) |
| 497 | continue; |
| 498 | |
| 499 | nux::Point2 screen_coord [4]; |
| 500 | @@ -1906,7 +1994,7 @@ |
| 501 | |
| 502 | for (it = _model->begin(); it != _model->end (); it++) |
| 503 | { |
| 504 | - if ((*it)->_folding_angle >= 0.0f || !(*it)->GetQuirk (LAUNCHER_ICON_QUIRK_VISIBLE)) |
| 505 | + if ((*it)->_folding_angle >= 0.0f || !(*it)->GetQuirk (LauncherIcon::QUIRK_VISIBLE)) |
| 506 | continue; |
| 507 | |
| 508 | nux::Point2 screen_coord [4]; |
| 509 | |
| 510 | === modified file 'src/Launcher.h' |
| 511 | --- src/Launcher.h 2010-12-16 07:02:03 +0000 |
| 512 | +++ src/Launcher.h 2010-12-22 01:51:30 +0000 |
| 513 | @@ -25,6 +25,7 @@ |
| 514 | |
| 515 | #include <Nux/View.h> |
| 516 | #include <Nux/BaseWindow.h> |
| 517 | + |
| 518 | #include "Introspectable.h" |
| 519 | #include "LauncherIcon.h" |
| 520 | #include "LauncherDragWindow.h" |
| 521 | @@ -32,12 +33,32 @@ |
| 522 | #include "Nux/TimerProc.h" |
| 523 | #include "PluginAdapter.h" |
| 524 | |
| 525 | +#define ANIM_DURATION_SHORT 125 |
| 526 | +#define ANIM_DURATION 200 |
| 527 | +#define ANIM_DURATION_LONG 350 |
| 528 | + |
| 529 | class LauncherModel; |
| 530 | class QuicklistView; |
| 531 | +class LauncherIcon; |
| 532 | +class LauncherDragWindow; |
| 533 | |
| 534 | class Launcher : public Introspectable, public nux::View |
| 535 | { |
| 536 | public: |
| 537 | + typedef enum |
| 538 | + { |
| 539 | + LAUNCH_ANIMATION_NONE, |
| 540 | + LAUNCH_ANIMATION_PULSE, |
| 541 | + LAUNCH_ANIMATION_BLINK, |
| 542 | + } LaunchAnimation; |
| 543 | + |
| 544 | + typedef enum |
| 545 | + { |
| 546 | + URGENT_ANIMATION_NONE, |
| 547 | + URGENT_ANIMATION_PULSE, |
| 548 | + URGENT_ANIMATION_WIGGLE, |
| 549 | + } UrgentAnimation; |
| 550 | + |
| 551 | Launcher(nux::BaseWindow *parent, CompScreen *screen, NUX_FILE_LINE_PROTO); |
| 552 | ~Launcher(); |
| 553 | |
| 554 | @@ -57,9 +78,20 @@ |
| 555 | |
| 556 | void SetAutohide (bool autohide, nux::View *show_trigger); |
| 557 | bool AutohideEnabled (); |
| 558 | + |
| 559 | + void SetBacklightAlwaysOn (bool always_on); |
| 560 | + bool GetBacklightAlwaysOn (); |
| 561 | + |
| 562 | + void SetLaunchAnimation (LaunchAnimation animation); |
| 563 | + LaunchAnimation GetLaunchAnimation (); |
| 564 | + |
| 565 | + void SetUrgentAnimation (UrgentAnimation animation); |
| 566 | + UrgentAnimation GetUrgentAnimation (); |
| 567 | |
| 568 | nux::BaseWindow* GetParent () { return _parent; }; |
| 569 | |
| 570 | + static void SetTimeStruct (struct timespec *timer, struct timespec *sister = 0, int sister_relation = 0); |
| 571 | + |
| 572 | virtual void RecvMouseUp(int x, int y, unsigned long button_flags, unsigned long key_flags); |
| 573 | virtual void RecvMouseDown(int x, int y, unsigned long button_flags, unsigned long key_flags); |
| 574 | virtual void RecvMouseDrag(int x, int y, int dx, int dy, unsigned long button_flags, unsigned long key_flags); |
| 575 | @@ -81,12 +113,6 @@ |
| 576 | private: |
| 577 | typedef enum |
| 578 | { |
| 579 | - LAUNCHER_FOLDED, |
| 580 | - LAUNCHER_UNFOLDED |
| 581 | - } LauncherState; |
| 582 | - |
| 583 | - typedef enum |
| 584 | - { |
| 585 | ACTION_NONE, |
| 586 | ACTION_DRAG_LAUNCHER, |
| 587 | ACTION_DRAG_ICON, |
| 588 | @@ -131,7 +157,6 @@ |
| 589 | |
| 590 | bool IconNeedsAnimation (LauncherIcon *icon, struct timespec const ¤t); |
| 591 | bool AnimationInProgress (); |
| 592 | - void SetTimeStruct (struct timespec *timer, struct timespec *sister = 0, int sister_relation = 0); |
| 593 | |
| 594 | void EnsureHoverState (); |
| 595 | void EnsureHiddenState (); |
| 596 | @@ -149,6 +174,8 @@ |
| 597 | float IconUrgentProgress (LauncherIcon *icon, struct timespec const ¤t); |
| 598 | float IconShimmerProgress (LauncherIcon *icon, struct timespec const ¤t); |
| 599 | float IconUrgentPulseValue (LauncherIcon *icon, struct timespec const ¤t); |
| 600 | + float IconUrgentWiggleValue (LauncherIcon *icon, struct timespec const ¤t); |
| 601 | + float IconStartingBlinkValue (LauncherIcon *icon, struct timespec const ¤t); |
| 602 | float IconStartingPulseValue (LauncherIcon *icon, struct timespec const ¤t); |
| 603 | float IconBackgroundIntensity (LauncherIcon *icon, struct timespec const ¤t); |
| 604 | float IconProgressBias (LauncherIcon *icon, struct timespec const ¤t); |
| 605 | @@ -237,6 +264,7 @@ |
| 606 | bool _mouse_inside_trigger; |
| 607 | bool _window_over_launcher; |
| 608 | bool _render_drag_window; |
| 609 | + bool _backlight_always_on; |
| 610 | |
| 611 | float _folded_angle; |
| 612 | float _neg_folded_angle; |
| 613 | @@ -244,8 +272,9 @@ |
| 614 | float _launcher_top_y; |
| 615 | float _launcher_bottom_y; |
| 616 | |
| 617 | - LauncherState _launcher_state; |
| 618 | LauncherActionState _launcher_action_state; |
| 619 | + LaunchAnimation _launch_animation; |
| 620 | + UrgentAnimation _urgent_animation; |
| 621 | |
| 622 | LauncherIcon* _icon_under_mouse; |
| 623 | LauncherIcon* _icon_mouse_down; |
| 624 | |
| 625 | === modified file 'src/LauncherController.cpp' |
| 626 | --- src/LauncherController.cpp 2010-12-15 23:50:38 +0000 |
| 627 | +++ src/LauncherController.cpp 2010-12-22 01:51:30 +0000 |
| 628 | @@ -193,9 +193,9 @@ |
| 629 | |
| 630 | expoIcon->SetTooltipText ("Workspace Switcher"); |
| 631 | expoIcon->SetIconName ("workspace-switcher"); |
| 632 | - expoIcon->SetQuirk (LAUNCHER_ICON_QUIRK_VISIBLE, true); |
| 633 | - expoIcon->SetQuirk (LAUNCHER_ICON_QUIRK_RUNNING, false); |
| 634 | - expoIcon->SetIconType (LAUNCHER_ICON_TYPE_END); |
| 635 | + expoIcon->SetQuirk (LauncherIcon::QUIRK_VISIBLE, true); |
| 636 | + expoIcon->SetQuirk (LauncherIcon::QUIRK_RUNNING, false); |
| 637 | + expoIcon->SetIconType (LauncherIcon::TYPE_END); |
| 638 | |
| 639 | expoIcon->MouseClick.connect (sigc::mem_fun (this, &LauncherController::OnExpoClicked)); |
| 640 | |
| 641 | @@ -253,7 +253,7 @@ |
| 642 | app = BAMF_APPLICATION (view); |
| 643 | |
| 644 | BamfLauncherIcon *icon = new BamfLauncherIcon (self->_launcher, app, self->_screen); |
| 645 | - icon->SetIconType (LAUNCHER_ICON_TYPE_APPLICATION); |
| 646 | + icon->SetIconType (LauncherIcon::TYPE_APPLICATION); |
| 647 | icon->SetSortPriority (self->_sort_priority++); |
| 648 | |
| 649 | self->RegisterIcon (icon); |
| 650 | @@ -279,7 +279,7 @@ |
| 651 | |
| 652 | bamf_view_set_sticky (BAMF_VIEW (app), true); |
| 653 | icon = new BamfLauncherIcon (_launcher, app, _screen); |
| 654 | - icon->SetIconType (LAUNCHER_ICON_TYPE_APPLICATION); |
| 655 | + icon->SetIconType (LauncherIcon::TYPE_APPLICATION); |
| 656 | icon->SetSortPriority (_sort_priority++); |
| 657 | |
| 658 | return icon; |
| 659 | |
| 660 | === modified file 'src/LauncherIcon.cpp' |
| 661 | --- src/LauncherIcon.cpp 2010-12-15 19:21:14 +0000 |
| 662 | +++ src/LauncherIcon.cpp 2010-12-22 01:51:30 +0000 |
| 663 | @@ -49,7 +49,7 @@ |
| 664 | _launcher = launcher; |
| 665 | m_TooltipText = "blank"; |
| 666 | |
| 667 | - for (int i = 0; i < LAUNCHER_ICON_QUIRK_LAST; i++) |
| 668 | + for (int i = 0; i < QUIRK_LAST; i++) |
| 669 | { |
| 670 | _quirks[i] = 0; |
| 671 | _quirk_times[i].tv_sec = 0; |
| 672 | @@ -63,7 +63,7 @@ |
| 673 | |
| 674 | _mouse_inside = false; |
| 675 | _tooltip = new nux::Tooltip (); |
| 676 | - _icon_type = LAUNCHER_ICON_TYPE_NONE; |
| 677 | + _icon_type = TYPE_NONE; |
| 678 | _sort_priority = 0; |
| 679 | |
| 680 | _quicklist = new QuicklistView (); |
| 681 | @@ -114,11 +114,11 @@ |
| 682 | g_variant_builder_add (builder, "{sv}", "tooltip-text", g_variant_new_string (m_TooltipText.GetTCharPtr ())); |
| 683 | |
| 684 | g_variant_builder_add (builder, "{sv}", "sort-priority", g_variant_new_int32 (_sort_priority)); |
| 685 | - g_variant_builder_add (builder, "{sv}", "quirk-active", g_variant_new_boolean (GetQuirk (LAUNCHER_ICON_QUIRK_ACTIVE))); |
| 686 | - g_variant_builder_add (builder, "{sv}", "quirk-visible", g_variant_new_boolean (GetQuirk (LAUNCHER_ICON_QUIRK_VISIBLE))); |
| 687 | - g_variant_builder_add (builder, "{sv}", "quirk-urgent", g_variant_new_boolean (GetQuirk (LAUNCHER_ICON_QUIRK_URGENT))); |
| 688 | - g_variant_builder_add (builder, "{sv}", "quirk-running", g_variant_new_boolean (GetQuirk (LAUNCHER_ICON_QUIRK_RUNNING))); |
| 689 | - g_variant_builder_add (builder, "{sv}", "quirk-presented", g_variant_new_boolean (GetQuirk (LAUNCHER_ICON_QUIRK_PRESENTED))); |
| 690 | + g_variant_builder_add (builder, "{sv}", "quirk-active", g_variant_new_boolean (GetQuirk (QUIRK_ACTIVE))); |
| 691 | + g_variant_builder_add (builder, "{sv}", "quirk-visible", g_variant_new_boolean (GetQuirk (QUIRK_VISIBLE))); |
| 692 | + g_variant_builder_add (builder, "{sv}", "quirk-urgent", g_variant_new_boolean (GetQuirk (QUIRK_URGENT))); |
| 693 | + g_variant_builder_add (builder, "{sv}", "quirk-running", g_variant_new_boolean (GetQuirk (QUIRK_RUNNING))); |
| 694 | + g_variant_builder_add (builder, "{sv}", "quirk-presented", g_variant_new_boolean (GetQuirk (QUIRK_PRESENTED))); |
| 695 | } |
| 696 | |
| 697 | nux::Color LauncherIcon::BackgroundColor () |
| 698 | @@ -422,14 +422,14 @@ |
| 699 | LauncherIcon::SaveCenter () |
| 700 | { |
| 701 | _saved_center = _center; |
| 702 | - UpdateQuirkTime (LAUNCHER_ICON_QUIRK_CENTER_SAVED); |
| 703 | + UpdateQuirkTime (QUIRK_CENTER_SAVED); |
| 704 | } |
| 705 | |
| 706 | gboolean |
| 707 | LauncherIcon::OnPresentTimeout (gpointer data) |
| 708 | { |
| 709 | LauncherIcon *self = (LauncherIcon*) data; |
| 710 | - if (!self->GetQuirk (LAUNCHER_ICON_QUIRK_PRESENTED)) |
| 711 | + if (!self->GetQuirk (QUIRK_PRESENTED)) |
| 712 | return false; |
| 713 | |
| 714 | self->_present_time_handle = 0; |
| 715 | @@ -446,26 +446,26 @@ |
| 716 | void |
| 717 | LauncherIcon::Present (float present_urgency, int length) |
| 718 | { |
| 719 | - if (GetQuirk (LAUNCHER_ICON_QUIRK_PRESENTED)) |
| 720 | + if (GetQuirk (QUIRK_PRESENTED)) |
| 721 | return; |
| 722 | |
| 723 | if (length >= 0) |
| 724 | _present_time_handle = g_timeout_add (length, &LauncherIcon::OnPresentTimeout, this); |
| 725 | |
| 726 | _present_urgency = CLAMP (present_urgency, 0.0f, 1.0f); |
| 727 | - SetQuirk (LAUNCHER_ICON_QUIRK_PRESENTED, true); |
| 728 | + SetQuirk (QUIRK_PRESENTED, true); |
| 729 | } |
| 730 | |
| 731 | void |
| 732 | LauncherIcon::Unpresent () |
| 733 | { |
| 734 | - if (!GetQuirk (LAUNCHER_ICON_QUIRK_PRESENTED)) |
| 735 | + if (!GetQuirk (QUIRK_PRESENTED)) |
| 736 | return; |
| 737 | |
| 738 | if (_present_time_handle > 0) |
| 739 | g_source_remove (_present_time_handle); |
| 740 | |
| 741 | - SetQuirk (LAUNCHER_ICON_QUIRK_PRESENTED, false); |
| 742 | + SetQuirk (QUIRK_PRESENTED, false); |
| 743 | } |
| 744 | |
| 745 | void |
| 746 | @@ -481,12 +481,12 @@ |
| 747 | void |
| 748 | LauncherIcon::Remove () |
| 749 | { |
| 750 | - SetQuirk (LAUNCHER_ICON_QUIRK_VISIBLE, false); |
| 751 | + SetQuirk (QUIRK_VISIBLE, false); |
| 752 | remove.emit (this); |
| 753 | } |
| 754 | |
| 755 | void |
| 756 | -LauncherIcon::SetIconType (LauncherIconType type) |
| 757 | +LauncherIcon::SetIconType (IconType type) |
| 758 | { |
| 759 | _icon_type = type; |
| 760 | } |
| 761 | @@ -503,32 +503,35 @@ |
| 762 | return _sort_priority; |
| 763 | } |
| 764 | |
| 765 | -LauncherIconType |
| 766 | +LauncherIcon::IconType |
| 767 | LauncherIcon::Type () |
| 768 | { |
| 769 | return _icon_type; |
| 770 | } |
| 771 | |
| 772 | bool |
| 773 | -LauncherIcon::GetQuirk (LauncherIconQuirk quirk) |
| 774 | +LauncherIcon::GetQuirk (LauncherIcon::Quirk quirk) |
| 775 | { |
| 776 | return _quirks[quirk]; |
| 777 | } |
| 778 | |
| 779 | void |
| 780 | -LauncherIcon::SetQuirk (LauncherIconQuirk quirk, bool value) |
| 781 | +LauncherIcon::SetQuirk (LauncherIcon::Quirk quirk, bool value) |
| 782 | { |
| 783 | if (_quirks[quirk] == value) |
| 784 | return; |
| 785 | |
| 786 | _quirks[quirk] = value; |
| 787 | - clock_gettime (CLOCK_MONOTONIC, &(_quirk_times[quirk])); |
| 788 | + if (quirk == QUIRK_VISIBLE) |
| 789 | + Launcher::SetTimeStruct (&(_quirk_times[quirk]), &(_quirk_times[quirk]), ANIM_DURATION_SHORT); |
| 790 | + else |
| 791 | + clock_gettime (CLOCK_MONOTONIC, &(_quirk_times[quirk])); |
| 792 | needs_redraw.emit (this); |
| 793 | |
| 794 | // Present on urgent as a general policy |
| 795 | - if (quirk == LAUNCHER_ICON_QUIRK_VISIBLE && value) |
| 796 | + if (quirk == QUIRK_VISIBLE && value) |
| 797 | Present (0.5f, 1500); |
| 798 | - if (quirk == LAUNCHER_ICON_QUIRK_URGENT && value) |
| 799 | + if (quirk == QUIRK_URGENT && value) |
| 800 | Present (0.5f, 1500); |
| 801 | } |
| 802 | |
| 803 | @@ -545,7 +548,7 @@ |
| 804 | } |
| 805 | |
| 806 | void |
| 807 | -LauncherIcon::UpdateQuirkTimeDelayed (guint ms, LauncherIconQuirk quirk) |
| 808 | +LauncherIcon::UpdateQuirkTimeDelayed (guint ms, LauncherIcon::Quirk quirk) |
| 809 | { |
| 810 | DelayedUpdateArg *arg = new DelayedUpdateArg (); |
| 811 | arg->self = this; |
| 812 | @@ -555,21 +558,21 @@ |
| 813 | } |
| 814 | |
| 815 | void |
| 816 | -LauncherIcon::UpdateQuirkTime (LauncherIconQuirk quirk) |
| 817 | +LauncherIcon::UpdateQuirkTime (LauncherIcon::Quirk quirk) |
| 818 | { |
| 819 | clock_gettime (CLOCK_MONOTONIC, &(_quirk_times[quirk])); |
| 820 | needs_redraw.emit (this); |
| 821 | } |
| 822 | |
| 823 | void |
| 824 | -LauncherIcon::ResetQuirkTime (LauncherIconQuirk quirk) |
| 825 | +LauncherIcon::ResetQuirkTime (LauncherIcon::Quirk quirk) |
| 826 | { |
| 827 | _quirk_times[quirk].tv_sec = 0; |
| 828 | _quirk_times[quirk].tv_nsec = 0; |
| 829 | } |
| 830 | |
| 831 | struct timespec |
| 832 | -LauncherIcon::GetQuirkTime (LauncherIconQuirk quirk) |
| 833 | +LauncherIcon::GetQuirkTime (LauncherIcon::Quirk quirk) |
| 834 | { |
| 835 | return _quirk_times[quirk]; |
| 836 | } |
| 837 | |
| 838 | === modified file 'src/LauncherIcon.h' |
| 839 | --- src/LauncherIcon.h 2010-12-15 19:21:14 +0000 |
| 840 | +++ src/LauncherIcon.h 2010-12-22 01:51:30 +0000 |
| 841 | @@ -36,40 +36,42 @@ |
| 842 | #include "Tooltip.h" |
| 843 | #include "QuicklistView.h" |
| 844 | #include "Introspectable.h" |
| 845 | +#include "Launcher.h" |
| 846 | |
| 847 | class Launcher; |
| 848 | class QuicklistView; |
| 849 | |
| 850 | -typedef enum |
| 851 | -{ |
| 852 | - LAUNCHER_ICON_TYPE_NONE, |
| 853 | - LAUNCHER_ICON_TYPE_BEGIN, |
| 854 | - LAUNCHER_ICON_TYPE_FAVORITE, |
| 855 | - LAUNCHER_ICON_TYPE_APPLICATION, |
| 856 | - LAUNCHER_ICON_TYPE_PLACE, |
| 857 | - LAUNCHER_ICON_TYPE_DEVICE, |
| 858 | - LAUNCHER_ICON_TYPE_TRASH, |
| 859 | - LAUNCHER_ICON_TYPE_END, |
| 860 | -} LauncherIconType; |
| 861 | - |
| 862 | -typedef enum |
| 863 | -{ |
| 864 | - LAUNCHER_ICON_QUIRK_VISIBLE, |
| 865 | - LAUNCHER_ICON_QUIRK_ACTIVE, |
| 866 | - LAUNCHER_ICON_QUIRK_RUNNING, |
| 867 | - LAUNCHER_ICON_QUIRK_URGENT, |
| 868 | - LAUNCHER_ICON_QUIRK_PRESENTED, |
| 869 | - LAUNCHER_ICON_QUIRK_STARTING, |
| 870 | - LAUNCHER_ICON_QUIRK_SHIMMER, |
| 871 | - LAUNCHER_ICON_QUIRK_CENTER_SAVED, |
| 872 | - LAUNCHER_ICON_QUIRK_PROGRESS, |
| 873 | - |
| 874 | - LAUNCHER_ICON_QUIRK_LAST, |
| 875 | -} LauncherIconQuirk; |
| 876 | |
| 877 | class LauncherIcon : public Introspectable, public nux::InitiallyUnownedObject, public sigc::trackable |
| 878 | { |
| 879 | public: |
| 880 | + typedef enum |
| 881 | + { |
| 882 | + TYPE_NONE, |
| 883 | + TYPE_BEGIN, |
| 884 | + TYPE_FAVORITE, |
| 885 | + TYPE_APPLICATION, |
| 886 | + TYPE_PLACE, |
| 887 | + TYPE_DEVICE, |
| 888 | + TYPE_TRASH, |
| 889 | + TYPE_END, |
| 890 | + } IconType; |
| 891 | + |
| 892 | + typedef enum |
| 893 | + { |
| 894 | + QUIRK_VISIBLE, |
| 895 | + QUIRK_ACTIVE, |
| 896 | + QUIRK_RUNNING, |
| 897 | + QUIRK_URGENT, |
| 898 | + QUIRK_PRESENTED, |
| 899 | + QUIRK_STARTING, |
| 900 | + QUIRK_SHIMMER, |
| 901 | + QUIRK_CENTER_SAVED, |
| 902 | + QUIRK_PROGRESS, |
| 903 | + |
| 904 | + QUIRK_LAST, |
| 905 | + } Quirk; |
| 906 | + |
| 907 | LauncherIcon(Launcher* launcher); |
| 908 | virtual ~LauncherIcon(); |
| 909 | |
| 910 | @@ -97,13 +99,13 @@ |
| 911 | |
| 912 | float GetProgress (); |
| 913 | |
| 914 | - bool GetQuirk (LauncherIconQuirk quirk); |
| 915 | - struct timespec GetQuirkTime (LauncherIconQuirk quirk); |
| 916 | - |
| 917 | - LauncherIconType Type (); |
| 918 | - |
| 919 | - nux::Color BackgroundColor (); |
| 920 | - nux::Color GlowColor (); |
| 921 | + bool GetQuirk (Quirk quirk); |
| 922 | + struct timespec GetQuirkTime (Quirk quirk); |
| 923 | + |
| 924 | + IconType Type (); |
| 925 | + |
| 926 | + virtual nux::Color BackgroundColor (); |
| 927 | + virtual nux::Color GlowColor (); |
| 928 | |
| 929 | nux::BaseTexture * TextureForSize (int size); |
| 930 | |
| 931 | @@ -123,11 +125,11 @@ |
| 932 | const gchar * GetName (); |
| 933 | void AddProperties (GVariantBuilder *builder); |
| 934 | |
| 935 | - void SetQuirk (LauncherIconQuirk quirk, bool value); |
| 936 | + void SetQuirk (Quirk quirk, bool value); |
| 937 | |
| 938 | - void UpdateQuirkTimeDelayed (guint ms, LauncherIconQuirk quirk); |
| 939 | - void UpdateQuirkTime (LauncherIconQuirk quirk); |
| 940 | - void ResetQuirkTime (LauncherIconQuirk quirk); |
| 941 | + void UpdateQuirkTimeDelayed (guint ms, Quirk quirk); |
| 942 | + void UpdateQuirkTime (Quirk quirk); |
| 943 | + void ResetQuirkTime (Quirk quirk); |
| 944 | |
| 945 | void SetRelatedWindows (int windows); |
| 946 | void Remove (); |
| 947 | @@ -137,7 +139,7 @@ |
| 948 | void Present (float urgency, int length); |
| 949 | void Unpresent (); |
| 950 | |
| 951 | - void SetIconType (LauncherIconType type); |
| 952 | + void SetIconType (IconType type); |
| 953 | void SetSortPriority (int priority); |
| 954 | |
| 955 | virtual std::list<DbusmenuMenuitem *> GetMenus (); |
| 956 | @@ -171,7 +173,7 @@ |
| 957 | typedef struct |
| 958 | { |
| 959 | LauncherIcon *self; |
| 960 | - LauncherIconQuirk quirk; |
| 961 | + Quirk quirk; |
| 962 | } DelayedUpdateArg; |
| 963 | |
| 964 | static void ChildRealized (DbusmenuMenuitem *newitem, QuicklistView *quicklist); |
| 965 | @@ -195,10 +197,10 @@ |
| 966 | nux::Point3 _center; |
| 967 | nux::Point3 _last_stable; |
| 968 | nux::Point3 _saved_center; |
| 969 | - LauncherIconType _icon_type; |
| 970 | + IconType _icon_type; |
| 971 | |
| 972 | - bool _quirks[LAUNCHER_ICON_QUIRK_LAST]; |
| 973 | - struct timespec _quirk_times[LAUNCHER_ICON_QUIRK_LAST]; |
| 974 | + bool _quirks[QUIRK_LAST]; |
| 975 | + struct timespec _quirk_times[QUIRK_LAST]; |
| 976 | |
| 977 | }; |
| 978 | |
| 979 | |
| 980 | === modified file 'src/LauncherModel.cpp' |
| 981 | --- src/LauncherModel.cpp 2010-12-11 05:56:12 +0000 |
| 982 | +++ src/LauncherModel.cpp 2010-12-22 01:51:30 +0000 |
| 983 | @@ -36,7 +36,7 @@ |
| 984 | |
| 985 | bool LauncherModel::IconShouldShelf (LauncherIcon *icon) |
| 986 | { |
| 987 | - return icon->Type () == LAUNCHER_ICON_TYPE_TRASH; |
| 988 | + return icon->Type () == LauncherIcon::TYPE_TRASH; |
| 989 | } |
| 990 | |
| 991 | void |
| 992 | |
| 993 | === modified file 'src/QuicklistMenuItemRadio.cpp' |
| 994 | --- src/QuicklistMenuItemRadio.cpp 2010-12-07 16:20:08 +0000 |
| 995 | +++ src/QuicklistMenuItemRadio.cpp 2010-12-22 01:51:30 +0000 |
| 996 | @@ -349,4 +349,4 @@ |
| 997 | return _normalTexture[0]->GetWidth (); |
| 998 | |
| 999 | return 0; |
| 1000 | -} |
| 1001 | \ No newline at end of file |
| 1002 | +} |
| 1003 | |
| 1004 | === modified file 'src/TrashLauncherIcon.cpp' |
| 1005 | --- src/TrashLauncherIcon.cpp 2010-12-13 23:30:10 +0000 |
| 1006 | +++ src/TrashLauncherIcon.cpp 2010-12-22 01:51:30 +0000 |
| 1007 | @@ -25,9 +25,9 @@ |
| 1008 | { |
| 1009 | SetTooltipText ("Trash"); |
| 1010 | SetIconName ("user-trash"); |
| 1011 | - SetQuirk (LAUNCHER_ICON_QUIRK_VISIBLE, true); |
| 1012 | - SetQuirk (LAUNCHER_ICON_QUIRK_RUNNING, false); |
| 1013 | - SetIconType (LAUNCHER_ICON_TYPE_TRASH); |
| 1014 | + SetQuirk (QUIRK_VISIBLE, true); |
| 1015 | + SetQuirk (QUIRK_RUNNING, false); |
| 1016 | + SetIconType (TYPE_TRASH); |
| 1017 | |
| 1018 | m_TrashMonitor = g_file_monitor_directory (g_file_new_for_uri("trash:///"), |
| 1019 | G_FILE_MONITOR_NONE, |
| 1020 | @@ -47,6 +47,18 @@ |
| 1021 | g_object_unref (m_TrashMonitor); |
| 1022 | } |
| 1023 | |
| 1024 | +nux::Color |
| 1025 | +TrashLauncherIcon::BackgroundColor () |
| 1026 | +{ |
| 1027 | + return nux::Color (0xFF333333); |
| 1028 | +} |
| 1029 | + |
| 1030 | +nux::Color |
| 1031 | +TrashLauncherIcon::GlowColor () |
| 1032 | +{ |
| 1033 | + return nux::Color (0xFF333333); |
| 1034 | +} |
| 1035 | + |
| 1036 | void |
| 1037 | TrashLauncherIcon::OnMouseClick (int button) |
| 1038 | { |
| 1039 | |
| 1040 | === modified file 'src/TrashLauncherIcon.h' |
| 1041 | --- src/TrashLauncherIcon.h 2010-12-07 18:14:21 +0000 |
| 1042 | +++ src/TrashLauncherIcon.h 2010-12-22 01:51:30 +0000 |
| 1043 | @@ -27,6 +27,9 @@ |
| 1044 | public: |
| 1045 | TrashLauncherIcon (Launcher *launcher); |
| 1046 | ~TrashLauncherIcon (); |
| 1047 | + |
| 1048 | + virtual nux::Color BackgroundColor (); |
| 1049 | + virtual nux::Color GlowColor (); |
| 1050 | |
| 1051 | protected: |
| 1052 | void OnMouseClick (int button); |
| 1053 | |
| 1054 | === modified file 'src/unityshell.cpp' |
| 1055 | --- src/unityshell.cpp 2010-12-17 14:11:55 +0000 |
| 1056 | +++ src/unityshell.cpp 2010-12-22 01:51:30 +0000 |
| 1057 | @@ -357,8 +357,14 @@ |
| 1058 | launcher->SetAutohide (optionGetLauncherAutohide (), |
| 1059 | (nux::View *) panelView->HomeButton ()); |
| 1060 | break; |
| 1061 | - case UnityshellOptions::LauncherFloat: |
| 1062 | - launcher->SetFloating (optionGetLauncherFloat ()); |
| 1063 | + case UnityshellOptions::BacklightAlwaysOn: |
| 1064 | + launcher->SetBacklightAlwaysOn (optionGetBacklightAlwaysOn ()); |
| 1065 | + break; |
| 1066 | + case UnityshellOptions::LaunchAnimation: |
| 1067 | + launcher->SetLaunchAnimation ((Launcher::LaunchAnimation) optionGetLaunchAnimation ()); |
| 1068 | + break; |
| 1069 | + case UnityshellOptions::UrgentAnimation: |
| 1070 | + launcher->SetUrgentAnimation ((Launcher::UrgentAnimation) optionGetUrgentAnimation ()); |
| 1071 | break; |
| 1072 | default: |
| 1073 | break; |
| 1074 | @@ -412,8 +418,10 @@ |
| 1075 | |
| 1076 | debugger = new IntrospectionDBusInterface (this); |
| 1077 | |
| 1078 | - optionSetLauncherAutohideNotify (boost::bind (&UnityScreen::optionChanged, this, _1, _2)); |
| 1079 | - optionSetLauncherFloatNotify (boost::bind (&UnityScreen::optionChanged, this, _1, _2)); |
| 1080 | + optionSetLauncherAutohideNotify (boost::bind (&UnityScreen::optionChanged, this, _1, _2)); |
| 1081 | + optionSetBacklightAlwaysOnNotify (boost::bind (&UnityScreen::optionChanged, this, _1, _2)); |
| 1082 | + optionSetLaunchAnimationNotify (boost::bind (&UnityScreen::optionChanged, this, _1, _2)); |
| 1083 | + optionSetUrgentAnimationNotify (boost::bind (&UnityScreen::optionChanged, this, _1, _2)); |
| 1084 | |
| 1085 | g_timeout_add (0, &UnityScreen::initPluginActions, this); |
| 1086 | g_timeout_add (5000, (GSourceFunc) write_logger_data_to_disk, NULL); |
| 1087 | @@ -471,6 +479,7 @@ |
| 1088 | self->launcherWindow->InputWindowEnableStruts(true); |
| 1089 | |
| 1090 | self->launcher->SetIconSize (54, 48); |
| 1091 | + self->launcher->SetBacklightAlwaysOn (true); |
| 1092 | LOGGER_END_PROCESS ("initLauncher-Launcher"); |
| 1093 | |
| 1094 | /* Setup panel */ |
| 1095 | @@ -500,6 +509,9 @@ |
| 1096 | /* Setup Places */ |
| 1097 | self->placesController = new PlacesController (); |
| 1098 | |
| 1099 | + self->launcher->SetAutohide (true, (nux::View *) self->panelView->HomeButton ()); |
| 1100 | + self->launcher->SetLaunchAnimation (Launcher::LAUNCH_ANIMATION_PULSE); |
| 1101 | + self->launcher->SetUrgentAnimation (Launcher::URGENT_ANIMATION_WIGGLE); |
| 1102 | g_timeout_add (2000, &UnityScreen::strutHackTimeout, self); |
| 1103 | |
| 1104 | END_FUNCTION (); |
| 1105 | |
| 1106 | === modified file 'unityshell.xml.in' |
| 1107 | --- unityshell.xml.in 2010-12-13 20:43:37 +0000 |
| 1108 | +++ unityshell.xml.in 2010-12-22 01:51:30 +0000 |
| 1109 | @@ -1,52 +1,96 @@ |
| 1110 | <?xml version="1.0" encoding="UTF-8"?> |
| 1111 | <compiz> |
| 1112 | <plugin name="unityshell" useBcop="true"> |
| 1113 | - <_short>Ubuntu Unity Plugin</_short> |
| 1114 | - <_long>Plugin to draw the Unity Shell</_long> |
| 1115 | - <category>Desktop</category> |
| 1116 | - <deps> |
| 1117 | - <relation type="after"> |
| 1118 | - <plugin>bailer</plugin> |
| 1119 | - <plugin>detection</plugin> |
| 1120 | - <plugin>composite</plugin> |
| 1121 | - <plugin>opengl</plugin> |
| 1122 | - <plugin>mousepoll</plugin> |
| 1123 | - <plugin>move</plugin> |
| 1124 | - <plugin>resize</plugin> |
| 1125 | - <plugin>decor</plugin> |
| 1126 | - <plugin>compiztoolbox</plugin> |
| 1127 | - <plugin>place</plugin> |
| 1128 | - <plugin>session</plugin> |
| 1129 | - <plugin>animation</plugin> |
| 1130 | - <plugin>regex</plugin> |
| 1131 | - <plugin>cube</plugin> |
| 1132 | - <plugin>rotate</plugin> |
| 1133 | - <plugin>cubeaddon</plugin> |
| 1134 | - <plugin>gnomecompat</plugin> |
| 1135 | - <plugin>vpswitch</plugin> |
| 1136 | - <plugin>fade</plugin> |
| 1137 | - <plugin>staticswitcher</plugin> |
| 1138 | - <plugin>scale</plugin> |
| 1139 | - <plugin>expo</plugin> |
| 1140 | - <plugin>ezoom</plugin> |
| 1141 | - <plugin>wall</plugin> |
| 1142 | - </relation> |
| 1143 | - <requirement> |
| 1144 | - <plugin>opengl</plugin> |
| 1145 | - <plugin>wall</plugin> |
| 1146 | - </requirement> |
| 1147 | - </deps> |
| 1148 | - <options> |
| 1149 | - <option name="launcher_autohide" type="bool"> |
| 1150 | - <_short>Autohide Launcher</_short> |
| 1151 | - <_long>Make the launcher hide automatically after some time inactive</_long> |
| 1152 | - <default>false</default> |
| 1153 | - </option> |
| 1154 | - <option name="launcher_float" type="bool"> |
| 1155 | - <_short>Float Launcher</_short> |
| 1156 | - <_long>Make the launcher appear above other windows</_long> |
| 1157 | - <default>false</default> |
| 1158 | - </option> |
| 1159 | - </options> |
| 1160 | + <_short>Ubuntu Unity Plugin</_short> |
| 1161 | + <_long>Plugin to draw the Unity Shell</_long> |
| 1162 | + <category>Desktop</category> |
| 1163 | + <deps> |
| 1164 | + <relation type="after"> |
| 1165 | + <plugin>bailer</plugin> |
| 1166 | + <plugin>detection</plugin> |
| 1167 | + <plugin>composite</plugin> |
| 1168 | + <plugin>opengl</plugin> |
| 1169 | + <plugin>mousepoll</plugin> |
| 1170 | + <plugin>move</plugin> |
| 1171 | + <plugin>resize</plugin> |
| 1172 | + <plugin>decor</plugin> |
| 1173 | + <plugin>compiztoolbox</plugin> |
| 1174 | + <plugin>place</plugin> |
| 1175 | + <plugin>session</plugin> |
| 1176 | + <plugin>animation</plugin> |
| 1177 | + <plugin>regex</plugin> |
| 1178 | + <plugin>cube</plugin> |
| 1179 | + <plugin>rotate</plugin> |
| 1180 | + <plugin>cubeaddon</plugin> |
| 1181 | + <plugin>gnomecompat</plugin> |
| 1182 | + <plugin>vpswitch</plugin> |
| 1183 | + <plugin>fade</plugin> |
| 1184 | + <plugin>staticswitcher</plugin> |
| 1185 | + <plugin>scale</plugin> |
| 1186 | + <plugin>expo</plugin> |
| 1187 | + <plugin>ezoom</plugin> |
| 1188 | + <plugin>wall</plugin> |
| 1189 | + </relation> |
| 1190 | + <requirement> |
| 1191 | + <plugin>opengl</plugin> |
| 1192 | + <plugin>wall</plugin> |
| 1193 | + </requirement> |
| 1194 | + </deps> |
| 1195 | + <options> |
| 1196 | + <group> |
| 1197 | + <_short>Behaviour</_short> |
| 1198 | + <option name="launcher_autohide" type="bool"> |
| 1199 | + <_short>Autohide Launcher</_short> |
| 1200 | + <_long>Make the launcher hide automatically after some time inactive</_long> |
| 1201 | + <default>true</default> |
| 1202 | + </option> |
| 1203 | + </group> |
| 1204 | + <group> |
| 1205 | + <_short>Experimental</_short> |
| 1206 | + <option name="backlight_always_on" type="bool"> |
| 1207 | + <_short>Backlight Always On</_short> |
| 1208 | + <_long>Make the launcher icons always have a backlight</_long> |
| 1209 | + <default>true</default> |
| 1210 | + </option> |
| 1211 | + <option name="launch_animation" type="int"> |
| 1212 | + <_short>Launch Animation</_short> |
| 1213 | + <_long>Animation played when a launcher icon is in the process of spawning a process</_long> |
| 1214 | + <min>0</min> |
| 1215 | + <max>2</max> |
| 1216 | + <default>1</default> |
| 1217 | + <desc> |
| 1218 | + <value>0</value> |
| 1219 | + <_name>None</_name> |
| 1220 | + </desc> |
| 1221 | + <desc> |
| 1222 | + <value>1</value> |
| 1223 | + <_name>Pulse Until Running</_name> |
| 1224 | + </desc> |
| 1225 | + <desc> |
| 1226 | + <value>2</value> |
| 1227 | + <_name>Blink</_name> |
| 1228 | + </desc> |
| 1229 | + </option> |
| 1230 | + <option name="urgent_animation" type="int"> |
| 1231 | + <_short>Uregnt Animation</_short> |
| 1232 | + <_long>Animation played when a launcher icon is in the urgent state</_long> |
| 1233 | + <min>0</min> |
| 1234 | + <max>2</max> |
| 1235 | + <default>2</default> |
| 1236 | + <desc> |
| 1237 | + <value>0</value> |
| 1238 | + <_name>None</_name> |
| 1239 | + </desc> |
| 1240 | + <desc> |
| 1241 | + <value>1</value> |
| 1242 | + <_name>Pulse</_name> |
| 1243 | + </desc> |
| 1244 | + <desc> |
| 1245 | + <value>2</value> |
| 1246 | + <_name>Wiggle</_name> |
| 1247 | + </desc> |
| 1248 | + </option> |
| 1249 | + </group> |
| 1250 | + </options> |
| 1251 | </plugin> |
| 1252 | </compiz> |


Can you add what launch animation is currently selected to introspection data, and then it looks ok to me.