~didrocks/notify-osd/bootstrap

« back to all changes in this revision

Viewing changes to src/defaults.c

  • Committer: Tarmac
  • Author(s): Michael Terry
  • Date: 2012-11-26 19:37:13 UTC
  • mfrom: (456.1.1 no-border)
  • Revision ID: tarmac-20121126193713-qcfs6arzuhuepwmf
When running without a compositor, there is an ugly black border.

This branch fixes that by:
1) Adding an 'is_composited' argument to defaults_get_bubble_shadow_size and defaults_get_bubble_corner_radius.  If we're not composited, they return 0.0f.
2) Adding a 'GdkScreen **screen' argument to defaults_get_top_corner
3) Using these throughout to check composited state wherever these are used.

Additionally, I had to add some oddness in bubble.c for _refresh_background.  There is a bit of code that draws a (seemingly unnecessary) image in shadow-size-units even in the uncomposited case.  But it can't use 0 because that causes a crash to create a 0-sized image.  So I used 1 for that special case.  Seems like it would be cleaner to avoid that path in uncomposited mode, but I didn't feel confident enough to make that change.

Approved by Didier Roche, jenkins.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1762
1762
}
1763
1763
 
1764
1764
gdouble
1765
 
defaults_get_bubble_shadow_size (Defaults* self)
 
1765
defaults_get_bubble_shadow_size (Defaults* self, gboolean is_composited)
1766
1766
{
1767
1767
        gdouble bubble_shadow_size;
1768
1768
 
1769
 
        if (!self || !IS_DEFAULTS (self))
 
1769
        if (!self || !IS_DEFAULTS (self) || !is_composited)
1770
1770
                return 0.0f;
1771
1771
 
1772
1772
        g_object_get (self, "bubble-shadow-size", &bubble_shadow_size, NULL);
1841
1841
}
1842
1842
 
1843
1843
gdouble
1844
 
defaults_get_bubble_corner_radius (Defaults* self)
 
1844
defaults_get_bubble_corner_radius (Defaults* self, gboolean is_composited)
1845
1845
{
1846
1846
        gdouble bubble_corner_radius;
1847
1847
 
1848
 
        if (!self || !IS_DEFAULTS (self))
 
1848
        if (!self || !IS_DEFAULTS (self) || !is_composited)
1849
1849
                return 0.0f;
1850
1850
 
1851
1851
        g_object_get (self,
2205
2205
}
2206
2206
 
2207
2207
void
2208
 
defaults_get_top_corner (Defaults *self, gint *x, gint *y)
 
2208
defaults_get_top_corner (Defaults *self, GdkScreen **screen, gint *x, gint *y)
2209
2209
{
2210
2210
        GdkRectangle rect;
2211
2211
        GdkRectangle panel_rect       = {0, 0, 0, 0};
2212
 
        GdkScreen*   screen           = NULL;
2213
2212
        GdkWindow*   active_window    = NULL;
2214
2213
        GdkWindow*   panel_window     = NULL;
2215
2214
        gint         mx;
2219
2218
        gint         aw_monitor;
2220
2219
        gboolean     has_panel_window = FALSE;
2221
2220
        gboolean     follow_focus     = defaults_multihead_does_focus_follow (self);
 
2221
        gboolean     is_composited    = FALSE;
2222
2222
 
2223
2223
        g_return_if_fail (self != NULL && IS_DEFAULTS (self));
2224
2224
 
2225
2225
        gdk_display_get_pointer (gdk_display_get_default (),
2226
 
                                 &screen,
 
2226
                                 screen,
2227
2227
                                 &mx,
2228
2228
                                 &my,
2229
2229
                                 NULL);
2230
2230
 
 
2231
        is_composited = gdk_screen_is_composited (*screen);
2231
2232
        panel_window = get_panel_window ();
2232
2233
 
2233
2234
        if (panel_window != NULL)
2234
2235
        {
2235
2236
                gdk_window_get_frame_extents (panel_window, &panel_rect);
2236
 
                panel_monitor = gdk_screen_get_monitor_at_window (screen,
 
2237
                panel_monitor = gdk_screen_get_monitor_at_window (*screen,
2237
2238
                                                                  panel_window);
2238
2239
                monitor = panel_monitor;
2239
2240
                g_debug ("found panel (%d,%d) - %dx%d on monitor %d",
2249
2250
        if (follow_focus)
2250
2251
        {
2251
2252
                g_debug ("multi_head_focus_follow mode");
2252
 
                monitor = gdk_screen_get_monitor_at_point (screen, mx, my);
2253
 
                active_window = gdk_screen_get_active_window (screen);
 
2253
                monitor = gdk_screen_get_monitor_at_point (*screen, mx, my);
 
2254
                active_window = gdk_screen_get_active_window (*screen);
2254
2255
                if (active_window != NULL)
2255
2256
                {
2256
2257
                        aw_monitor = gdk_screen_get_monitor_at_window (
2257
 
                                        screen,
 
2258
                                        *screen,
2258
2259
                                        active_window);
2259
2260
 
2260
2261
                        if (monitor != aw_monitor)
2270
2271
                }
2271
2272
        }
2272
2273
 
2273
 
        gdk_screen_get_monitor_geometry (screen, monitor, &rect);
 
2274
        gdk_screen_get_monitor_geometry (*screen, monitor, &rect);
2274
2275
        g_debug ("selecting monitor %d at (%d,%d) - %dx%d",
2275
2276
                 monitor,
2276
2277
                 rect.x,
2299
2300
 
2300
2301
        *y   = rect.y;
2301
2302
        *y  += EM2PIXELS (defaults_get_bubble_vert_gap (self), self)
2302
 
               - EM2PIXELS (defaults_get_bubble_shadow_size (self), self);
 
2303
               - EM2PIXELS (defaults_get_bubble_shadow_size (self, is_composited), self);
2303
2304
 
2304
2305
        /* correct potential offset in multi-monitor setups with two (or more)
2305
2306
         * monitors side by side, all having different vertical resolutions and
2307
2308
         * the top edge of the monitor with the lowest vertical resolution,
2308
2309
         * LP: #716458 */
2309
2310
        GdkRectangle cur_geo       = {0, 0, 0, 0};
2310
 
        int          num_monitors  = gdk_screen_get_n_monitors (screen);
2311
 
        int          screen_width  = gdk_screen_get_width (screen);
2312
 
        int          screen_height = gdk_screen_get_height (screen);
 
2311
        int          num_monitors  = gdk_screen_get_n_monitors (*screen);
 
2312
        int          screen_width  = gdk_screen_get_width (*screen);
 
2313
        int          screen_height = gdk_screen_get_height (*screen);
2313
2314
 
2314
2315
        if (!follow_focus && num_monitors > 1)
2315
2316
        {
2319
2320
                {
2320
2321
                        int right_most_monitor = 0;
2321
2322
 
2322
 
                        right_most_monitor = gdk_screen_get_monitor_at_point (screen,
 
2323
                        right_most_monitor = gdk_screen_get_monitor_at_point (*screen,
2323
2324
                                                                              screen_width,
2324
2325
                                                                              screen_height / 2);
2325
 
                        gdk_screen_get_monitor_geometry (screen,
 
2326
                        gdk_screen_get_monitor_geometry (*screen,
2326
2327
                                                         right_most_monitor,
2327
2328
                                                         &cur_geo);
2328
2329
                        if (cur_geo.y != 0)
2332
2333
                {
2333
2334
                        int left_most_monitor = 0;
2334
2335
 
2335
 
                        left_most_monitor = gdk_screen_get_monitor_at_point (screen,
 
2336
                        left_most_monitor = gdk_screen_get_monitor_at_point (*screen,
2336
2337
                                                                             0,
2337
2338
                                                                             screen_height / 2);
2338
 
                        gdk_screen_get_monitor_geometry (screen,
 
2339
                        gdk_screen_get_monitor_geometry (*screen,
2339
2340
                                                         left_most_monitor,
2340
2341
                                                         &cur_geo);
2341
2342
                        if (cur_geo.y != 0)
2348
2349
        if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_LTR)
2349
2350
        {
2350
2351
                *x = rect.x + rect.width;
2351
 
                *x -= EM2PIXELS (defaults_get_bubble_shadow_size (self), self)
 
2352
                *x -= EM2PIXELS (defaults_get_bubble_shadow_size (self, is_composited), self)
2352
2353
                        + EM2PIXELS (defaults_get_bubble_horz_gap (self), self)
2353
2354
                        + EM2PIXELS (defaults_get_bubble_width (self), self);
2354
2355
        } else {
2355
2356
                *x = rect.x
2356
 
                        - EM2PIXELS (defaults_get_bubble_shadow_size (self), self)
 
2357
                        - EM2PIXELS (defaults_get_bubble_shadow_size (self, is_composited), self)
2357
2358
                        + EM2PIXELS (defaults_get_bubble_horz_gap (self), self);
2358
2359
        }
2359
2360