Compare commits
2 Commits
citadel
...
wip/jimmac
Author | SHA1 | Date | |
---|---|---|---|
|
04b0f86433 | ||
|
43584e1d35 |
@ -15,7 +15,7 @@ variables:
|
|||||||
- merge_requests
|
- merge_requests
|
||||||
|
|
||||||
check_commit_log:
|
check_commit_log:
|
||||||
image: registry.gitlab.gnome.org/gnome/mutter/master:v2
|
image: registry.gitlab.gnome.org/gnome/mutter/master:v1
|
||||||
stage: review
|
stage: review
|
||||||
variables:
|
variables:
|
||||||
GIT_DEPTH: "100"
|
GIT_DEPTH: "100"
|
||||||
@ -40,7 +40,7 @@ js_check:
|
|||||||
when: on_failure
|
when: on_failure
|
||||||
|
|
||||||
build:
|
build:
|
||||||
image: registry.gitlab.gnome.org/gnome/mutter/master:v2
|
image: registry.gitlab.gnome.org/gnome/mutter/master:v1
|
||||||
stage: build
|
stage: build
|
||||||
before_script:
|
before_script:
|
||||||
- .gitlab-ci/checkout-mutter.sh
|
- .gitlab-ci/checkout-mutter.sh
|
||||||
@ -58,7 +58,7 @@ build:
|
|||||||
- build
|
- build
|
||||||
|
|
||||||
test:
|
test:
|
||||||
image: registry.gitlab.gnome.org/gnome/mutter/master:v2
|
image: registry.gitlab.gnome.org/gnome/mutter/master:v1
|
||||||
stage: test
|
stage: test
|
||||||
before_script:
|
before_script:
|
||||||
- ninja -C mutter/build install
|
- ninja -C mutter/build install
|
||||||
@ -72,7 +72,7 @@ test:
|
|||||||
when: on_failure
|
when: on_failure
|
||||||
|
|
||||||
test-pot:
|
test-pot:
|
||||||
image: registry.gitlab.gnome.org/gnome/mutter/master:v2
|
image: registry.gitlab.gnome.org/gnome/mutter/master:v1
|
||||||
stage: test
|
stage: test
|
||||||
before_script:
|
before_script:
|
||||||
- ninja -C mutter/build install
|
- ninja -C mutter/build install
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
$variant: 'light';
|
||||||
|
|
||||||
@import "gnome-shell-sass/_high-contrast-colors"; //use gtk colors
|
@import "gnome-shell-sass/_high-contrast-colors"; //use gtk colors
|
||||||
@import "gnome-shell-sass/_drawing";
|
@import "gnome-shell-sass/_drawing";
|
||||||
@import "gnome-shell-sass/_common";
|
@import "gnome-shell-sass/_common";
|
||||||
|
@ -11,6 +11,7 @@ $selected_bg_color: if($variant == 'light', #3584e4, darken(#3584e4, 20%));
|
|||||||
$selected_borders_color: if($variant== 'light', darken($selected_bg_color, 15%), darken($selected_bg_color, 30%));
|
$selected_borders_color: if($variant== 'light', darken($selected_bg_color, 15%), darken($selected_bg_color, 30%));
|
||||||
$borders_color: if($variant == 'light', darken($bg_color, 18%), darken($bg_color, 10%));
|
$borders_color: if($variant == 'light', darken($bg_color, 18%), darken($bg_color, 10%));
|
||||||
$borders_edge: if($variant == 'light', transparentize(white, 0.2), transparentize($fg_color, 0.93));
|
$borders_edge: if($variant == 'light', transparentize(white, 0.2), transparentize($fg_color, 0.93));
|
||||||
|
$alt_borders_color: if($variant == 'light', darken($bg_color, 24%), darken($bg_color, 18%));
|
||||||
$link_color: if($variant == 'light', darken($selected_bg_color, 10%), lighten($selected_bg_color, 20%));
|
$link_color: if($variant == 'light', darken($selected_bg_color, 10%), lighten($selected_bg_color, 20%));
|
||||||
$link_visited_color: if($variant == 'light', darken($selected_bg_color, 20%), lighten($selected_bg_color, 10%));
|
$link_visited_color: if($variant == 'light', darken($selected_bg_color, 20%), lighten($selected_bg_color, 10%));
|
||||||
$top_hilight: $borders_edge;
|
$top_hilight: $borders_edge;
|
||||||
@ -24,6 +25,7 @@ $osd_fg_color: #eeeeec;
|
|||||||
$osd_bg_color: #2e3436;
|
$osd_bg_color: #2e3436;
|
||||||
$osd_borders_color: transparentize(black, 0.3);
|
$osd_borders_color: transparentize(black, 0.3);
|
||||||
$osd_outer_borders_color: transparentize(white, 0.9);
|
$osd_outer_borders_color: transparentize(white, 0.9);
|
||||||
|
$shadow_color: transparentize(black, 0.9);
|
||||||
|
|
||||||
$tooltip_borders_color: $osd_outer_borders_color;
|
$tooltip_borders_color: $osd_outer_borders_color;
|
||||||
|
|
||||||
|
@ -1012,8 +1012,11 @@ StScrollBar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.message-list-clear-button.button {
|
.message-list-clear-button.button {
|
||||||
background-color: transparent;
|
@include button(normal);
|
||||||
&:hover,&:focus { background-color: lighten($bg_color,5%); }
|
&:insensitive { @include button(insensitive); }
|
||||||
|
&:hover { @include button(hover); }
|
||||||
|
&:focus { @include button(focus); }
|
||||||
|
&:active { @include button(active); }
|
||||||
margin: 1.5em 1.5em 0;
|
margin: 1.5em 1.5em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1537,12 +1540,12 @@ StScrollBar {
|
|||||||
width: 34em;
|
width: 34em;
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
color: $_bubble_fg_color;
|
color: $fg_color;
|
||||||
background-color: $_bubble_bg_color;
|
background-color: $bg_color;
|
||||||
border: 1px solid $borders_color;
|
border: 1px solid $borders_color;
|
||||||
//box-shadow: 0 1px 4px black;
|
box-shadow: 0 1px 4px black;
|
||||||
&:hover { background-color: $_bubble_bg_color; }
|
//&:hover { background-color: $bg_color; }
|
||||||
&:focus { background-color: $_bubble_bg_color; }
|
//&:focus { background-color: $bg_color; }
|
||||||
|
|
||||||
.notification-icon { padding: 5px; }
|
.notification-icon { padding: 5px; }
|
||||||
.notification-content { padding: 5px; spacing: 5px; }
|
.notification-content { padding: 5px; spacing: 5px; }
|
||||||
@ -1557,7 +1560,6 @@ StScrollBar {
|
|||||||
background-color: darken($_bubble_bg_color,5%);
|
background-color: darken($_bubble_bg_color,5%);
|
||||||
&:first-child { border-radius: 0 0 0 6px; }
|
&:first-child { border-radius: 0 0 0 6px; }
|
||||||
&:last-child { border-radius: 0 0 6px 0; }
|
&:last-child { border-radius: 0 0 6px 0; }
|
||||||
&:hover, &focus { background-color: darken($_bubble_bg_color,2%); }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.summary-source-counter {
|
.summary-source-counter {
|
||||||
|
@ -111,7 +111,59 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin button($t, $c:$osd_bg_color, $tc:$fg_color, $edge: $borders_edge) {
|
@function _border_color($c, $darker: false) {
|
||||||
|
@if $darker == true { @return darken($c, 20%); }
|
||||||
|
@else { @return darken($c, 10%); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@function _text_shadow_color ($tc: $fg_color, $bg: $bg_color) {
|
||||||
|
//
|
||||||
|
// calculate the color of text shadows
|
||||||
|
//
|
||||||
|
// $tc is the text color
|
||||||
|
// $bg is the background color
|
||||||
|
//
|
||||||
|
$_lbg: lightness($bg)/100%;
|
||||||
|
@if lightness($tc)<50% { @return transparentize(white, 1-$_lbg/($_lbg*1.3)); }
|
||||||
|
@else { @return transparentize(black, $_lbg*0.8); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@function _button_hilight_color($c) {
|
||||||
|
//
|
||||||
|
// calculate the right top hilight color for buttons
|
||||||
|
//
|
||||||
|
// $c: base color;
|
||||||
|
//
|
||||||
|
@if lightness($c)>95% { @return white; }
|
||||||
|
@else if lightness($c)>90% { @return transparentize(white, 0.2); }
|
||||||
|
@else if lightness($c)>80% { @return transparentize(white, 0.5); }
|
||||||
|
@else if lightness($c)>50% { @return transparentize(white, 0.8); }
|
||||||
|
@else if lightness($c)>40% { @return transparentize(white, 0.9); }
|
||||||
|
@else { @return transparentize(white, 0.98); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin _button_text_shadow ($tc:$fg_color, $bg:$bg_color) {
|
||||||
|
//
|
||||||
|
// helper function for the text emboss effect
|
||||||
|
//
|
||||||
|
// $tc is the optional text color, not the shadow color
|
||||||
|
//
|
||||||
|
// TODO: this functions needs a way to deal with special cases
|
||||||
|
//
|
||||||
|
|
||||||
|
$_shadow: _text_shadow_color($tc, $bg);
|
||||||
|
|
||||||
|
@if lightness($tc)<50% {
|
||||||
|
text-shadow: 0 1px $_shadow;
|
||||||
|
-gtk-icon-shadow: 0 1px $_shadow;
|
||||||
|
}
|
||||||
|
@else {
|
||||||
|
text-shadow: 0 -1px $_shadow;
|
||||||
|
-gtk-icon-shadow: 0 -1px $_shadow;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin button($t, $c:$bg_color, $tc:$fg_color, $edge: none) {
|
||||||
//
|
//
|
||||||
// Button drawing function
|
// Button drawing function
|
||||||
//
|
//
|
||||||
@ -126,96 +178,222 @@
|
|||||||
// backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active,
|
// backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active,
|
||||||
// osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated
|
// osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated
|
||||||
//
|
//
|
||||||
|
// This mixin sets the $button_fill global variable which containts the button background-image
|
||||||
|
//
|
||||||
$_hilight_color: _button_hilight_color($c);
|
$_hilight_color: _button_hilight_color($c);
|
||||||
$_button_edge: if($edge == none, none, _widget_edge($edge));
|
$_button_edge: if($edge == none, none, _widget_edge($edge));
|
||||||
$_blank_edge: if($edge == none, none, _widget_edge(transparentize($edge,1)));
|
$_blank_edge: if($edge == none, none, _widget_edge(transparentize($edge,1)));
|
||||||
|
$_button_shadow: 0 1px 2px transparentize($shadow_color, 0.03);
|
||||||
|
|
||||||
@if $t==normal {
|
@if $t==normal {
|
||||||
//
|
//
|
||||||
// normal button
|
// normal button
|
||||||
//
|
//
|
||||||
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.5),
|
color: $tc;
|
||||||
$osd_bg_color);
|
outline-color: transparentize($tc, 0.7);
|
||||||
|
border-color: if($c != $bg_color, _border_color($c), $borders_color);
|
||||||
color: $osd_fg_color;
|
border-bottom-color: if($c != $bg_color, _border_color($c, true), $alt_borders_color);
|
||||||
background-color: $_bg;
|
$button_fill: if($variant == 'light', linear-gradient(to top, darken($c, 4%) 2px, $c),
|
||||||
border-color: $osd_borders_color;
|
linear-gradient(to top, darken($c,1%) 2px, $c)) !global;
|
||||||
box-shadow: inset 0 1px lighten($osd_bg_color,10%);
|
background-image: $button_fill;
|
||||||
text-shadow: 0 1px black;
|
@include _button_text_shadow($tc, $c);
|
||||||
icon-shadow: 0 1px black;
|
@include _shadows(inset 0 1px $_hilight_color, $_button_edge, $_button_shadow);
|
||||||
}
|
|
||||||
@if $t==focus {
|
|
||||||
//
|
|
||||||
// focused button
|
|
||||||
//
|
|
||||||
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.3),
|
|
||||||
lighten($osd_bg_color,3%));
|
|
||||||
|
|
||||||
color: $osd_fg_color;
|
|
||||||
text-shadow: 0 1px black;
|
|
||||||
icon-shadow: 0 1px black;
|
|
||||||
box-shadow: inset 0px 0px 0px 1px $selected_bg_color;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@else if $t==hover {
|
@else if $t==hover {
|
||||||
//
|
//
|
||||||
// active osd button
|
// hovered button
|
||||||
//
|
//
|
||||||
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.3),
|
color: $tc;
|
||||||
lighten($osd_bg_color,3%));
|
outline-color: transparentize($tc, 0.7);
|
||||||
|
border-color: if($c != $bg_color, _border_color($c), $borders_color);
|
||||||
color: white;
|
border-bottom-color: if($c != $bg_color, _border_color($c, true), $alt_borders_color);
|
||||||
border-color: $osd_borders_color;
|
@if $variant == 'light' {
|
||||||
background-color: $_bg;
|
$button_fill: linear-gradient(to top, $c, lighten($c, 1%) 1px) !global;
|
||||||
box-shadow: inset 0 1px lighten($osd_bg_color,20%);
|
@include _button_text_shadow($tc, lighten($c, 6%));
|
||||||
text-shadow: 0 1px black;
|
@include _shadows(inset 0 1px _button_hilight_color(lighten($c, 6%)), $_button_edge, $_button_shadow);
|
||||||
icon-shadow: 0 1px black;
|
}
|
||||||
|
@else {
|
||||||
|
$button_fill: linear-gradient(to top, darken($c,1%), lighten($c, 1%) 1px) !global;
|
||||||
|
@include _button_text_shadow($tc,lighten($c, 6%));
|
||||||
|
@include _shadows(inset 0 1px _button_hilight_color(darken($c, 2%)), $_button_edge, $_button_shadow);
|
||||||
|
}
|
||||||
|
background-image: $button_fill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@if $t==normal-alt {
|
||||||
|
//
|
||||||
|
// normal button alternative look
|
||||||
|
//
|
||||||
|
color: $tc;
|
||||||
|
outline-color: transparentize($tc, 0.7);
|
||||||
|
border-color: if($c != $bg_color, _border_color($c, true), $alt_borders_color);
|
||||||
|
@include _button_text_shadow($tc, $c);
|
||||||
|
@if $variant == 'light' {
|
||||||
|
background-image: linear-gradient(to bottom, lighten($c, 5%) 20%, $c 90%);
|
||||||
|
@include _shadows(inset 0 1px _button_hilight_color(lighten($c, 6%)),
|
||||||
|
$_button_edge, $_button_shadow);
|
||||||
|
}
|
||||||
|
@else {
|
||||||
|
background-image: linear-gradient(to bottom, darken($c, 3%) 20%, darken($c, 6%) 90%);
|
||||||
|
@include _shadows(inset 0 1px $_hilight_color,
|
||||||
|
$_button_edge, $_button_shadow);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@else if $t==hover-alt {
|
||||||
|
//
|
||||||
|
// hovered button alternative look
|
||||||
|
//
|
||||||
|
color: $tc;
|
||||||
|
outline-color: transparentize($tc, 0.7);
|
||||||
|
border-color: if($c != $bg_color, _border_color($c, true), $alt_borders_color);
|
||||||
|
@if $variant == 'light' {
|
||||||
|
$button_fill: linear-gradient(to bottom, lighten($c, 9%) 10%, lighten($c, 4%) 90%) !global;
|
||||||
|
@include _shadows(inset 0 1px _button_hilight_color(lighten($c, 6%)),
|
||||||
|
$_button_edge, $_button_shadow);
|
||||||
|
}
|
||||||
|
@else {
|
||||||
|
$button_fill: linear-gradient(to bottom, $c 20%, darken($c, 4%) 90%) !global;
|
||||||
|
@include _shadows(inset 0 1px $_hilight_color,
|
||||||
|
$_button_edge, $_button_shadow);
|
||||||
|
}
|
||||||
|
background-image: $button_fill;
|
||||||
|
}
|
||||||
|
|
||||||
@else if $t==active {
|
@else if $t==active {
|
||||||
//
|
//
|
||||||
|
// pushed button
|
||||||
|
//
|
||||||
|
color: $tc;
|
||||||
|
outline-color: transparentize($tc, 0.7);
|
||||||
|
border-color: if($c != $bg_color, _border_color($c), $borders_color);
|
||||||
|
$button_fill: if($variant == 'light', image(darken($c, 14%)), image(darken($c, 9%))) !global;
|
||||||
|
background-image: $button_fill;
|
||||||
|
@include _shadows(inset 0 1px transparentize($_hilight_color, 1), $_button_edge);
|
||||||
|
|
||||||
|
text-shadow: none;
|
||||||
|
-gtk-icon-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@else if $t==insensitive {
|
||||||
|
//
|
||||||
|
// insensitive button
|
||||||
|
//
|
||||||
|
$_bg: if($c != $bg_color, mix($c, $base_color, 85%), $insensitive_bg_color);
|
||||||
|
|
||||||
|
label, & { color: if($tc != $fg_color, mix($tc, $_bg, 50%), $insensitive_fg_color); }
|
||||||
|
|
||||||
|
border-color: if($c != $bg_color, _border_color($c), $insensitive_borders_color);
|
||||||
|
$button_fill: image($_bg) !global;
|
||||||
|
background-image: $button_fill;
|
||||||
|
text-shadow: none;
|
||||||
|
-gtk-icon-shadow: none;
|
||||||
|
// white with 0 alpha to avoid an ugly transition, since no color means
|
||||||
|
// black with 0 alpha
|
||||||
|
@include _shadows(inset 0 1px transparentize(white, 1), $_button_edge);
|
||||||
|
}
|
||||||
|
|
||||||
|
@else if $t==insensitive-active {
|
||||||
|
//
|
||||||
|
// insensitive pushed button
|
||||||
|
//
|
||||||
|
$_bg: if($variant == 'light', darken(mix($c, $base_color, 85%), 8%), darken(mix($c, $base_color, 85%), 6%));
|
||||||
|
$_bc: if($c != $bg_color, _border_color($c), $insensitive_borders_color);
|
||||||
|
|
||||||
|
label, & { color: if($c != $bg_color, mix($tc, $_bg, 60%), $insensitive_fg_color); }
|
||||||
|
|
||||||
|
border-color: $_bc;
|
||||||
|
$button_fill: image($_bg) !global;
|
||||||
|
background-image: $button_fill;
|
||||||
|
// white with 0 alpha to avoid an ugly transition, since no color means
|
||||||
|
// black with 0 alpha
|
||||||
|
@include _shadows(inset 0 1px transparentize(white, 1), $_button_edge);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@else if $t==osd {
|
||||||
|
//
|
||||||
|
// normal osd button
|
||||||
|
//
|
||||||
|
$_bg: if($c != $bg_color, transparentize($c, 0.5), $osd_bg_color);
|
||||||
|
|
||||||
|
color: $osd_fg_color;
|
||||||
|
border-color: $osd_borders_color;
|
||||||
|
background-color: transparent;
|
||||||
|
$button_fill: image($_bg) !global;
|
||||||
|
background-image: $button_fill;
|
||||||
|
background-clip: padding-box;
|
||||||
|
box-shadow: inset 0 1px transparentize(white, 0.9);
|
||||||
|
text-shadow: 0 1px black;
|
||||||
|
-gtk-icon-shadow: 0 1px black;
|
||||||
|
outline-color: transparentize($osd_fg_color, 0.7);
|
||||||
|
}
|
||||||
|
|
||||||
|
@else if $t==osd-hover {
|
||||||
|
//
|
||||||
// active osd button
|
// active osd button
|
||||||
//
|
//
|
||||||
$_bg: if($c!=$bg_color, $c, $osd_borders_color);
|
$_bg: if($c != $bg_color, transparentize($c, 0.3), lighten($osd_bg_color, 12%));
|
||||||
|
|
||||||
color: white;
|
color: white;
|
||||||
border-color: $osd_borders_color;
|
border-color: $osd_borders_color;
|
||||||
background-color: $selected_bg_color;
|
background-color: transparent;
|
||||||
// This should be none, but it's creating some issues with borders, so to
|
$button_fill: image($_bg) !global;
|
||||||
// workaround it for now, use inset wich goes through a different code path.
|
background-image: $button_fill;
|
||||||
// see https://bugzilla.gnome.org/show_bug.cgi?id=752934
|
background-clip: padding-box;
|
||||||
box-shadow: inset 0 0 black;
|
box-shadow: inset 0 1px transparentize(white, 0.9);
|
||||||
text-shadow: none;
|
text-shadow: 0 1px black;
|
||||||
icon-shadow: none;
|
-gtk-icon-shadow: 0 1px black;
|
||||||
|
outline-color: transparentize($osd_fg_color, 0.7);
|
||||||
}
|
}
|
||||||
@else if $t==insensitive {
|
|
||||||
|
@else if $t==osd-active {
|
||||||
|
//
|
||||||
|
// active osd button
|
||||||
|
//
|
||||||
|
$_bg: if($c != $bg_color, $c, $osd_borders_color);
|
||||||
|
|
||||||
|
color: white;
|
||||||
|
border-color: $osd_borders_color;
|
||||||
|
background-color: transparent;
|
||||||
|
$button_fill: image($_bg) !global;
|
||||||
|
background-image: $button_fill;
|
||||||
|
background-clip: padding-box;
|
||||||
|
box-shadow: none;
|
||||||
|
text-shadow: none;
|
||||||
|
-gtk-icon-shadow: none;
|
||||||
|
outline-color: transparentize($osd_fg_color, 0.7);
|
||||||
|
}
|
||||||
|
|
||||||
|
@else if $t==osd-insensitive {
|
||||||
//
|
//
|
||||||
// insensitive osd button
|
// insensitive osd button
|
||||||
//
|
//
|
||||||
$_bg: transparentize(mix($insensitive_fg_color,$osd_bg_color,20%),0.3);
|
color: $osd_insensitive_fg_color;
|
||||||
|
|
||||||
color: $insensitive_fg_color;
|
|
||||||
border-color: $osd_borders_color;
|
border-color: $osd_borders_color;
|
||||||
background-color: $_bg;
|
background-color: transparent;
|
||||||
|
$button_fill: image($osd_insensitive_bg_color) !global;
|
||||||
|
background-image: $button_fill;
|
||||||
|
background-clip: padding-box;
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
icon-shadow: none;
|
-gtk-icon-shadow: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@else if $t==undecorated {
|
@else if $t==undecorated {
|
||||||
//
|
//
|
||||||
// reset
|
// reset
|
||||||
//
|
//
|
||||||
border-color: transparent;
|
border-color: transparent;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
background-image: none;
|
$button_fill: none !global;
|
||||||
|
background-image: $button_fill;
|
||||||
|
|
||||||
@include _shadows(inset 0 1px transparentize(white,1),
|
@include _shadows(inset 0 1px transparentize(white, 1), $_blank_edge);
|
||||||
$_blank_edge);
|
|
||||||
|
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
icon-shadow: none;
|
-gtk-icon-shadow: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ $selected_fg_color: #ffffff;
|
|||||||
$selected_bg_color: darken(#4a90d9,20%);
|
$selected_bg_color: darken(#4a90d9,20%);
|
||||||
$selected_borders_color: darken($selected_bg_color, 20%);
|
$selected_borders_color: darken($selected_bg_color, 20%);
|
||||||
$borders_color: darken($bg_color,12%);
|
$borders_color: darken($bg_color,12%);
|
||||||
|
$alt_borders_color: darken($bg_color,12%);
|
||||||
$borders_edge: transparentize($fg_color, 0.9);
|
$borders_edge: transparentize($fg_color, 0.9);
|
||||||
$link_color: lighten($selected_bg_color,20%);
|
$link_color: lighten($selected_bg_color,20%);
|
||||||
$link_visited_color: lighten($selected_bg_color,10%);
|
$link_visited_color: lighten($selected_bg_color,10%);
|
||||||
@ -24,6 +25,7 @@ $osd_fg_color: #eeeeec;
|
|||||||
$osd_bg_color: #2e3436;
|
$osd_bg_color: #2e3436;
|
||||||
$osd_borders_color: transparentize(black, 0.3);
|
$osd_borders_color: transparentize(black, 0.3);
|
||||||
$osd_outer_borders_color: transparentize(white, 0.9);
|
$osd_outer_borders_color: transparentize(white, 0.9);
|
||||||
|
$shadow_color: rgba(0,0,0,0);
|
||||||
|
|
||||||
$tooltip_borders_color: $osd_outer_borders_color;
|
$tooltip_borders_color: $osd_outer_borders_color;
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
$variant: 'dark';
|
$variant: 'light';
|
||||||
|
|
||||||
@import "gnome-shell-sass/_colors"; //use gtk colors
|
@import "gnome-shell-sass/_colors"; //use gtk colors
|
||||||
@import "gnome-shell-sass/_drawing";
|
@import "gnome-shell-sass/_drawing";
|
||||||
|
@ -14,7 +14,7 @@ cogl_pango_pc = 'mutter-cogl-pango-' + mutter_api_version
|
|||||||
libmutter_pc = 'libmutter-' + mutter_api_version
|
libmutter_pc = 'libmutter-' + mutter_api_version
|
||||||
|
|
||||||
croco_req = '>= 0.6.8'
|
croco_req = '>= 0.6.8'
|
||||||
ecal_req = '>= 3.33.1'
|
ecal_req = '>= 3.5.3'
|
||||||
eds_req = '>= 3.17.2'
|
eds_req = '>= 3.17.2'
|
||||||
gcr_req = '>= 3.7.5'
|
gcr_req = '>= 3.7.5'
|
||||||
gdesktop_req = '>= 3.7.90'
|
gdesktop_req = '>= 3.7.90'
|
||||||
@ -73,7 +73,7 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
atk_bridge_dep = dependency('atk-bridge-2.0')
|
atk_bridge_dep = dependency('atk-bridge-2.0')
|
||||||
ecal_dep = dependency('libecal-2.0', version: ecal_req)
|
ecal_dep = dependency('libecal-1.2', version: ecal_req)
|
||||||
eds_dep = dependency('libedataserver-1.2', version: eds_req)
|
eds_dep = dependency('libedataserver-1.2', version: eds_req)
|
||||||
gcr_dep = dependency('gcr-base-3', version: gcr_req)
|
gcr_dep = dependency('gcr-base-3', version: gcr_req)
|
||||||
gdk_x11_dep = dependency('gdk-x11-3.0')
|
gdk_x11_dep = dependency('gdk-x11-3.0')
|
||||||
|
@ -295,13 +295,13 @@ create_client_for_source (ESource *source,
|
|||||||
CalendarSourceData *source_data)
|
CalendarSourceData *source_data)
|
||||||
{
|
{
|
||||||
ClientData *data;
|
ClientData *data;
|
||||||
EClient *client;
|
ECalClient *client;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
client = g_hash_table_lookup (source_data->clients, source);
|
client = g_hash_table_lookup (source_data->clients, source);
|
||||||
g_return_if_fail (client == NULL);
|
g_return_if_fail (client == NULL);
|
||||||
|
|
||||||
client = e_cal_client_connect_sync (source, source_type, -1, NULL, &error);
|
client = e_cal_client_new (source, source_type, &error);
|
||||||
if (!client)
|
if (!client)
|
||||||
{
|
{
|
||||||
g_warning ("Could not load source '%s': %s",
|
g_warning ("Could not load source '%s': %s",
|
||||||
@ -312,7 +312,7 @@ create_client_for_source (ESource *source,
|
|||||||
}
|
}
|
||||||
|
|
||||||
data = g_slice_new0 (ClientData);
|
data = g_slice_new0 (ClientData);
|
||||||
data->client = E_CAL_CLIENT (client); /* takes ownership */
|
data->client = client; /* takes ownership */
|
||||||
data->backend_died_id = g_signal_connect (client,
|
data->backend_died_id = g_signal_connect (client,
|
||||||
"backend-died",
|
"backend-died",
|
||||||
G_CALLBACK (backend_died_cb),
|
G_CALLBACK (backend_died_cb),
|
||||||
|
@ -102,120 +102,97 @@ typedef struct
|
|||||||
} CollectAppointmentsData;
|
} CollectAppointmentsData;
|
||||||
|
|
||||||
static time_t
|
static time_t
|
||||||
get_time_from_property (ICalComponent *icomp,
|
get_time_from_property (icalcomponent *ical,
|
||||||
ICalPropertyKind prop_kind,
|
icalproperty_kind prop_kind,
|
||||||
ICalTime * (* get_prop_func) (ICalProperty *prop),
|
struct icaltimetype (* get_prop_func) (const icalproperty *prop),
|
||||||
ICalTimezone *default_zone)
|
icaltimezone *default_zone)
|
||||||
{
|
{
|
||||||
ICalProperty *prop;
|
icalproperty *prop;
|
||||||
ICalTime *itt;
|
struct icaltimetype ical_time;
|
||||||
ICalParameter *param;
|
icalparameter *param;
|
||||||
ICalTimezone *timezone = NULL;
|
icaltimezone *timezone = NULL;
|
||||||
time_t retval;
|
|
||||||
|
|
||||||
prop = i_cal_component_get_first_property (icomp, prop_kind);
|
prop = icalcomponent_get_first_property (ical, prop_kind);
|
||||||
if (!prop)
|
if (!prop)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
itt = get_prop_func (prop);
|
ical_time = get_prop_func (prop);
|
||||||
|
|
||||||
param = i_cal_property_get_first_parameter (prop, I_CAL_TZID_PARAMETER);
|
param = icalproperty_get_first_parameter (prop, ICAL_TZID_PARAMETER);
|
||||||
if (param)
|
if (param)
|
||||||
timezone = i_cal_timezone_get_builtin_timezone_from_tzid (i_cal_parameter_get_tzid (param));
|
timezone = icaltimezone_get_builtin_timezone_from_tzid (icalparameter_get_tzid (param));
|
||||||
else if (i_cal_time_is_utc (itt))
|
else if (icaltime_is_utc (ical_time))
|
||||||
timezone = i_cal_timezone_get_utc_timezone ();
|
timezone = icaltimezone_get_utc_timezone ();
|
||||||
else
|
else
|
||||||
timezone = default_zone;
|
timezone = default_zone;
|
||||||
|
|
||||||
retval = i_cal_time_as_timet_with_zone (itt, timezone);
|
return icaltime_as_timet_with_zone (ical_time, timezone);
|
||||||
|
|
||||||
g_clear_object (¶m);
|
|
||||||
g_clear_object (&prop);
|
|
||||||
g_clear_object (&itt);
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
get_ical_uid (ICalComponent *icomp)
|
get_ical_uid (icalcomponent *ical)
|
||||||
{
|
{
|
||||||
return g_strdup (i_cal_component_get_uid (icomp));
|
return g_strdup (icalcomponent_get_uid (ical));
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
get_ical_summary (ICalComponent *icomp)
|
get_ical_summary (icalcomponent *ical)
|
||||||
{
|
{
|
||||||
ICalProperty *prop;
|
icalproperty *prop;
|
||||||
char *retval;
|
|
||||||
|
|
||||||
prop = i_cal_component_get_first_property (icomp, I_CAL_SUMMARY_PROPERTY);
|
prop = icalcomponent_get_first_property (ical, ICAL_SUMMARY_PROPERTY);
|
||||||
if (!prop)
|
if (!prop)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
retval = g_strdup (i_cal_property_get_summary (prop));
|
return g_strdup (icalproperty_get_summary (prop));
|
||||||
|
|
||||||
g_object_unref (prop);
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
get_ical_description (ICalComponent *icomp)
|
get_ical_description (icalcomponent *ical)
|
||||||
{
|
{
|
||||||
ICalProperty *prop;
|
icalproperty *prop;
|
||||||
char *retval;
|
|
||||||
|
|
||||||
prop = i_cal_component_get_first_property (icomp, I_CAL_DESCRIPTION_PROPERTY);
|
prop = icalcomponent_get_first_property (ical, ICAL_DESCRIPTION_PROPERTY);
|
||||||
if (!prop)
|
if (!prop)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
retval = g_strdup (i_cal_property_get_description (prop));
|
return g_strdup (icalproperty_get_description (prop));
|
||||||
|
|
||||||
g_object_unref (prop);
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline time_t
|
static inline time_t
|
||||||
get_ical_start_time (ICalComponent *icomp,
|
get_ical_start_time (icalcomponent *ical,
|
||||||
ICalTimezone *default_zone)
|
icaltimezone *default_zone)
|
||||||
{
|
{
|
||||||
return get_time_from_property (icomp,
|
return get_time_from_property (ical,
|
||||||
I_CAL_DTSTART_PROPERTY,
|
ICAL_DTSTART_PROPERTY,
|
||||||
i_cal_property_get_dtstart,
|
icalproperty_get_dtstart,
|
||||||
default_zone);
|
default_zone);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline time_t
|
static inline time_t
|
||||||
get_ical_end_time (ICalComponent *icomp,
|
get_ical_end_time (icalcomponent *ical,
|
||||||
ICalTimezone *default_zone)
|
icaltimezone *default_zone)
|
||||||
{
|
{
|
||||||
return get_time_from_property (icomp,
|
return get_time_from_property (ical,
|
||||||
I_CAL_DTEND_PROPERTY,
|
ICAL_DTEND_PROPERTY,
|
||||||
i_cal_property_get_dtend,
|
icalproperty_get_dtend,
|
||||||
default_zone);
|
default_zone);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
get_ical_is_all_day (ICalComponent *icomp,
|
get_ical_is_all_day (icalcomponent *ical,
|
||||||
time_t start_time,
|
time_t start_time,
|
||||||
ICalTimezone *default_zone)
|
icaltimezone *default_zone)
|
||||||
{
|
{
|
||||||
ICalProperty *prop;
|
icalproperty *prop;
|
||||||
ICalDuration *duration;
|
struct tm *start_tm;
|
||||||
ICalTime *dtstart;
|
time_t end_time;
|
||||||
struct tm *start_tm;
|
struct icaldurationtype duration;
|
||||||
time_t end_time;
|
struct icaltimetype start_icaltime;
|
||||||
gboolean retval;
|
|
||||||
|
|
||||||
dtstart = i_cal_component_get_dtstart (icomp);
|
start_icaltime = icalcomponent_get_dtstart (ical);
|
||||||
if (dtstart && i_cal_time_is_date (dtstart))
|
if (start_icaltime.is_date)
|
||||||
{
|
return TRUE;
|
||||||
g_clear_object (&dtstart);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_clear_object (&dtstart);
|
|
||||||
|
|
||||||
start_tm = gmtime (&start_time);
|
start_tm = gmtime (&start_time);
|
||||||
if (start_tm->tm_sec != 0 ||
|
if (start_tm->tm_sec != 0 ||
|
||||||
@ -223,40 +200,35 @@ get_ical_is_all_day (ICalComponent *icomp,
|
|||||||
start_tm->tm_hour != 0)
|
start_tm->tm_hour != 0)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if ((end_time = get_ical_end_time (icomp, default_zone)))
|
if ((end_time = get_ical_end_time (ical, default_zone)))
|
||||||
return (end_time - start_time) % 86400 == 0;
|
return (end_time - start_time) % 86400 == 0;
|
||||||
|
|
||||||
prop = i_cal_component_get_first_property (icomp, I_CAL_DURATION_PROPERTY);
|
prop = icalcomponent_get_first_property (ical, ICAL_DURATION_PROPERTY);
|
||||||
if (!prop)
|
if (!prop)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
duration = i_cal_property_get_duration (prop);
|
duration = icalproperty_get_duration (prop);
|
||||||
|
|
||||||
retval = duration && (i_cal_duration_as_int (duration) % 86400) == 0;
|
return icaldurationtype_as_int (duration) % 86400 == 0;
|
||||||
|
|
||||||
g_clear_object (&duration);
|
|
||||||
g_clear_object (&prop);
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline time_t
|
static inline time_t
|
||||||
get_ical_due_time (ICalComponent *icomp,
|
get_ical_due_time (icalcomponent *ical,
|
||||||
ICalTimezone *default_zone)
|
icaltimezone *default_zone)
|
||||||
{
|
{
|
||||||
return get_time_from_property (icomp,
|
return get_time_from_property (ical,
|
||||||
I_CAL_DUE_PROPERTY,
|
ICAL_DUE_PROPERTY,
|
||||||
i_cal_property_get_due,
|
icalproperty_get_due,
|
||||||
default_zone);
|
default_zone);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline time_t
|
static inline time_t
|
||||||
get_ical_completed_time (ICalComponent *icomp,
|
get_ical_completed_time (icalcomponent *ical,
|
||||||
ICalTimezone *default_zone)
|
icaltimezone *default_zone)
|
||||||
{
|
{
|
||||||
return get_time_from_property (icomp,
|
return get_time_from_property (ical,
|
||||||
I_CAL_COMPLETED_PROPERTY,
|
ICAL_COMPLETED_PROPERTY,
|
||||||
i_cal_property_get_completed,
|
icalproperty_get_completed,
|
||||||
default_zone);
|
default_zone);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -393,69 +365,67 @@ calendar_appointment_free (CalendarAppointment *appointment)
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
calendar_appointment_init (CalendarAppointment *appointment,
|
calendar_appointment_init (CalendarAppointment *appointment,
|
||||||
ICalComponent *icomp,
|
icalcomponent *ical,
|
||||||
ECalClient *cal)
|
ECalClient *cal)
|
||||||
{
|
{
|
||||||
ICalTimezone *default_zone;
|
icaltimezone *default_zone;
|
||||||
const char *source_id;
|
const char *source_id;
|
||||||
|
|
||||||
source_id = e_source_get_uid (e_client_get_source (E_CLIENT (cal)));
|
source_id = e_source_get_uid (e_client_get_source (E_CLIENT (cal)));
|
||||||
default_zone = e_cal_client_get_default_timezone (cal);
|
default_zone = e_cal_client_get_default_timezone (cal);
|
||||||
|
|
||||||
appointment->uid = get_ical_uid (icomp);
|
appointment->uid = get_ical_uid (ical);
|
||||||
appointment->source_id = g_strdup (source_id);
|
appointment->source_id = g_strdup (source_id);
|
||||||
appointment->backend_name = get_source_backend_name (cal);
|
appointment->backend_name = get_source_backend_name (cal);
|
||||||
appointment->summary = get_ical_summary (icomp);
|
appointment->summary = get_ical_summary (ical);
|
||||||
appointment->description = get_ical_description (icomp);
|
appointment->description = get_ical_description (ical);
|
||||||
appointment->color_string = get_source_color (cal);
|
appointment->color_string = get_source_color (cal);
|
||||||
appointment->start_time = get_ical_start_time (icomp, default_zone);
|
appointment->start_time = get_ical_start_time (ical, default_zone);
|
||||||
appointment->end_time = get_ical_end_time (icomp, default_zone);
|
appointment->end_time = get_ical_end_time (ical, default_zone);
|
||||||
appointment->is_all_day = get_ical_is_all_day (icomp,
|
appointment->is_all_day = get_ical_is_all_day (ical,
|
||||||
appointment->start_time,
|
appointment->start_time,
|
||||||
default_zone);
|
default_zone);
|
||||||
}
|
}
|
||||||
|
|
||||||
static CalendarAppointment *
|
static CalendarAppointment *
|
||||||
calendar_appointment_new (ICalComponent *icomp,
|
calendar_appointment_new (icalcomponent *ical,
|
||||||
ECalClient *cal)
|
ECalClient *cal)
|
||||||
{
|
{
|
||||||
CalendarAppointment *appointment;
|
CalendarAppointment *appointment;
|
||||||
|
|
||||||
appointment = g_new0 (CalendarAppointment, 1);
|
appointment = g_new0 (CalendarAppointment, 1);
|
||||||
|
|
||||||
calendar_appointment_init (appointment, icomp, cal);
|
calendar_appointment_init (appointment, ical, cal);
|
||||||
return appointment;
|
return appointment;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
generate_instances_cb (ICalComponent *icomp,
|
generate_instances_cb (ECalComponent *comp,
|
||||||
ICalTime *instance_start,
|
time_t start,
|
||||||
ICalTime *instance_end,
|
time_t end,
|
||||||
gpointer user_data,
|
gpointer data)
|
||||||
GCancellable *cancellable,
|
|
||||||
GError **error)
|
|
||||||
{
|
{
|
||||||
ECalClient *cal = ((CollectAppointmentsData *)user_data)->client;
|
ECalClient *cal = ((CollectAppointmentsData *)data)->client;
|
||||||
GHashTable *appointments = ((CollectAppointmentsData *)user_data)->appointments;
|
GHashTable *appointments = ((CollectAppointmentsData *)data)->appointments;
|
||||||
CalendarAppointment *appointment;
|
CalendarAppointment *appointment;
|
||||||
CalendarOccurrence *occurrence;
|
CalendarOccurrence *occurrence;
|
||||||
ICalTimezone *default_zone;
|
const char *uid;
|
||||||
const gchar *uid;
|
|
||||||
|
|
||||||
default_zone = e_cal_client_get_default_timezone (cal);
|
e_cal_component_get_uid (comp, &uid);
|
||||||
uid = i_cal_component_get_uid (icomp);
|
|
||||||
appointment = g_hash_table_lookup (appointments, uid);
|
appointment = g_hash_table_lookup (appointments, uid);
|
||||||
|
|
||||||
if (appointment == NULL)
|
if (appointment == NULL)
|
||||||
{
|
{
|
||||||
appointment = calendar_appointment_new (icomp, cal);
|
icalcomponent *ical = e_cal_component_get_icalcomponent (comp);
|
||||||
|
|
||||||
|
appointment = calendar_appointment_new (ical, cal);
|
||||||
g_hash_table_insert (appointments, g_strdup (uid), appointment);
|
g_hash_table_insert (appointments, g_strdup (uid), appointment);
|
||||||
}
|
}
|
||||||
|
|
||||||
occurrence = g_new0 (CalendarOccurrence, 1);
|
occurrence = g_new0 (CalendarOccurrence, 1);
|
||||||
occurrence->start_time = i_cal_time_as_timet_with_zone (instance_start, default_zone);
|
occurrence->start_time = start;
|
||||||
occurrence->end_time = i_cal_time_as_timet_with_zone (instance_end, default_zone);
|
occurrence->end_time = end;
|
||||||
occurrence->rid = e_cal_util_component_get_recurid_as_string (icomp);
|
occurrence->rid = e_cal_component_get_recurid_as_string (comp);
|
||||||
|
|
||||||
appointment->occurrences = g_slist_append (appointment->occurrences, occurrence);
|
appointment->occurrences = g_slist_append (appointment->occurrences, occurrence);
|
||||||
|
|
||||||
@ -472,7 +442,7 @@ struct _App
|
|||||||
time_t since;
|
time_t since;
|
||||||
time_t until;
|
time_t until;
|
||||||
|
|
||||||
ICalTimezone *zone;
|
icaltimezone *zone;
|
||||||
|
|
||||||
CalendarSources *sources;
|
CalendarSources *sources;
|
||||||
gulong sources_signal_id;
|
gulong sources_signal_id;
|
||||||
@ -498,9 +468,9 @@ app_update_timezone (App *app)
|
|||||||
if (g_strcmp0 (location, app->timezone_location) != 0)
|
if (g_strcmp0 (location, app->timezone_location) != 0)
|
||||||
{
|
{
|
||||||
if (location == NULL)
|
if (location == NULL)
|
||||||
app->zone = i_cal_timezone_get_utc_timezone ();
|
app->zone = icaltimezone_get_utc_timezone ();
|
||||||
else
|
else
|
||||||
app->zone = i_cal_timezone_get_builtin_timezone (location);
|
app->zone = icaltimezone_get_builtin_timezone (location);
|
||||||
g_free (app->timezone_location);
|
g_free (app->timezone_location);
|
||||||
app->timezone_location = location;
|
app->timezone_location = location;
|
||||||
print_debug ("Using timezone %s", app->timezone_location);
|
print_debug ("Using timezone %s", app->timezone_location);
|
||||||
@ -558,10 +528,10 @@ on_objects_added (ECalClientView *view,
|
|||||||
|
|
||||||
for (l = objects; l != NULL; l = l->next)
|
for (l = objects; l != NULL; l = l->next)
|
||||||
{
|
{
|
||||||
ICalComponent *icomp = l->data;
|
icalcomponent *ical = l->data;
|
||||||
const char *uid;
|
const char *uid;
|
||||||
|
|
||||||
uid = i_cal_component_get_uid (icomp);
|
uid = icalcomponent_get_uid (ical);
|
||||||
|
|
||||||
if (g_hash_table_lookup (app->appointments, uid) == NULL)
|
if (g_hash_table_lookup (app->appointments, uid) == NULL)
|
||||||
{
|
{
|
||||||
@ -630,7 +600,7 @@ app_load_events (App *app)
|
|||||||
|
|
||||||
since_iso8601 = isodate_from_time_t (app->since);
|
since_iso8601 = isodate_from_time_t (app->since);
|
||||||
until_iso8601 = isodate_from_time_t (app->until);
|
until_iso8601 = isodate_from_time_t (app->until);
|
||||||
tz_location = i_cal_timezone_get_location (app->zone);
|
tz_location = icaltimezone_get_location (app->zone);
|
||||||
|
|
||||||
print_debug ("Loading events since %s until %s",
|
print_debug ("Loading events since %s until %s",
|
||||||
since_iso8601,
|
since_iso8601,
|
||||||
@ -652,12 +622,21 @@ app_load_events (App *app)
|
|||||||
|
|
||||||
e_cal_client_set_default_timezone (cal, app->zone);
|
e_cal_client_set_default_timezone (cal, app->zone);
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
if (!e_client_open_sync (E_CLIENT (cal), TRUE, NULL, &error))
|
||||||
|
{
|
||||||
|
ESource *source = e_client_get_source (E_CLIENT (cal));
|
||||||
|
g_warning ("Error opening calendar %s: %s\n",
|
||||||
|
e_source_get_uid (source), error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
data.client = cal;
|
data.client = cal;
|
||||||
data.appointments = app->appointments;
|
data.appointments = app->appointments;
|
||||||
e_cal_client_generate_instances_sync (cal,
|
e_cal_client_generate_instances_sync (cal,
|
||||||
app->since,
|
app->since,
|
||||||
app->until,
|
app->until,
|
||||||
NULL,
|
|
||||||
generate_instances_cb,
|
generate_instances_cb,
|
||||||
&data);
|
&data);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user