Compare commits
	
		
			2 Commits
		
	
	
		
			wip/carlos
			...
			wip/jimmac
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 04b0f86433 | ||
|   | 43584e1d35 | 
| @@ -15,7 +15,7 @@ variables: | ||||
|         - merge_requests | ||||
|  | ||||
| check_commit_log: | ||||
|     image: registry.gitlab.gnome.org/gnome/mutter/master:v2 | ||||
|     image: registry.gitlab.gnome.org/gnome/mutter/master:v1 | ||||
|     stage: review | ||||
|     variables: | ||||
|         GIT_DEPTH: "100" | ||||
| @@ -40,7 +40,7 @@ js_check: | ||||
|         when: on_failure | ||||
|  | ||||
| build: | ||||
|     image: registry.gitlab.gnome.org/gnome/mutter/master:v2 | ||||
|     image: registry.gitlab.gnome.org/gnome/mutter/master:v1 | ||||
|     stage: build | ||||
|     before_script: | ||||
|         - .gitlab-ci/checkout-mutter.sh | ||||
| @@ -58,7 +58,7 @@ build: | ||||
|             - build | ||||
|  | ||||
| test: | ||||
|     image: registry.gitlab.gnome.org/gnome/mutter/master:v2 | ||||
|     image: registry.gitlab.gnome.org/gnome/mutter/master:v1 | ||||
|     stage: test | ||||
|     before_script: | ||||
|         - ninja -C mutter/build install | ||||
| @@ -72,7 +72,7 @@ test: | ||||
|         when: on_failure | ||||
|  | ||||
| test-pot: | ||||
|     image: registry.gitlab.gnome.org/gnome/mutter/master:v2 | ||||
|     image: registry.gitlab.gnome.org/gnome/mutter/master:v1 | ||||
|     stage: test | ||||
|     before_script: | ||||
|         - 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/_drawing"; | ||||
| @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%)); | ||||
| $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)); | ||||
| $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_visited_color: if($variant == 'light', darken($selected_bg_color, 20%), lighten($selected_bg_color, 10%)); | ||||
| $top_hilight: $borders_edge; | ||||
| @@ -24,6 +25,7 @@ $osd_fg_color: #eeeeec; | ||||
| $osd_bg_color: #2e3436; | ||||
| $osd_borders_color: transparentize(black, 0.3); | ||||
| $osd_outer_borders_color: transparentize(white, 0.9); | ||||
| $shadow_color: transparentize(black, 0.9); | ||||
|  | ||||
| $tooltip_borders_color: $osd_outer_borders_color; | ||||
|  | ||||
|   | ||||
| @@ -1012,8 +1012,11 @@ StScrollBar { | ||||
|       } | ||||
|  | ||||
|         .message-list-clear-button.button { | ||||
|           background-color: transparent; | ||||
|           &:hover,&:focus { background-color: lighten($bg_color,5%); } | ||||
| 	  @include button(normal); | ||||
| 	  &:insensitive { @include button(insensitive); } | ||||
| 	  &:hover { @include button(hover); } | ||||
| 	  &:focus { @include button(focus); } | ||||
| 	  &:active { @include button(active); } | ||||
|           margin: 1.5em 1.5em 0; | ||||
|         } | ||||
|  | ||||
| @@ -1537,12 +1540,12 @@ StScrollBar { | ||||
|     width: 34em; | ||||
|     margin: 5px; | ||||
|     border-radius: 6px; | ||||
|     color: $_bubble_fg_color; | ||||
|     background-color: $_bubble_bg_color; | ||||
|     color: $fg_color; | ||||
|     background-color: $bg_color; | ||||
|     border: 1px solid $borders_color; | ||||
|     //box-shadow: 0 1px 4px black; | ||||
|     &:hover { background-color: $_bubble_bg_color; } | ||||
|     &:focus { background-color: $_bubble_bg_color; } | ||||
|     box-shadow: 0 1px 4px black; | ||||
|     //&:hover { background-color: $bg_color; } | ||||
|     //&:focus { background-color: $bg_color; } | ||||
|  | ||||
|     .notification-icon { padding: 5px; } | ||||
|     .notification-content { padding: 5px; spacing: 5px; } | ||||
| @@ -1557,7 +1560,6 @@ StScrollBar { | ||||
|       background-color: darken($_bubble_bg_color,5%); | ||||
|       &:first-child { border-radius: 0 0 0 6px; } | ||||
|       &:last-child { border-radius: 0 0 6px 0; } | ||||
|       &:hover, &focus { background-color: darken($_bubble_bg_color,2%); } | ||||
|     } | ||||
|   } | ||||
|   .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 | ||||
| // | ||||
| @@ -126,96 +178,222 @@ | ||||
| // backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active, | ||||
| // 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); | ||||
|   $_button_edge: if($edge == none, none, _widget_edge($edge)); | ||||
|   $_blank_edge: if($edge == none, none, _widget_edge(transparentize($edge,1))); | ||||
|  | ||||
|   $_button_shadow: 0 1px 2px transparentize($shadow_color, 0.03); | ||||
|  | ||||
|   @if $t==normal { | ||||
|   // | ||||
|   // normal button | ||||
|   // | ||||
|     $_bg: if($c!=$osd_bg_color, transparentize($c, 0.5), | ||||
|                             $osd_bg_color); | ||||
|  | ||||
|     color: $osd_fg_color; | ||||
|     background-color: $_bg; | ||||
|     border-color: $osd_borders_color; | ||||
|     box-shadow: inset 0 1px lighten($osd_bg_color,10%); | ||||
|     text-shadow: 0 1px black; | ||||
|     icon-shadow: 0 1px black; | ||||
|   } | ||||
|   @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; | ||||
|     color: $tc; | ||||
|     outline-color: transparentize($tc, 0.7); | ||||
|     border-color: if($c != $bg_color, _border_color($c), $borders_color); | ||||
|     border-bottom-color: if($c != $bg_color, _border_color($c, true), $alt_borders_color); | ||||
|     $button_fill: if($variant == 'light', linear-gradient(to top, darken($c, 4%) 2px, $c), | ||||
|                                           linear-gradient(to top, darken($c,1%) 2px, $c)) !global; | ||||
|     background-image: $button_fill; | ||||
|     @include _button_text_shadow($tc, $c); | ||||
|     @include _shadows(inset 0 1px $_hilight_color, $_button_edge, $_button_shadow); | ||||
|   } | ||||
|  | ||||
|   @else if $t==hover { | ||||
|   // | ||||
|   // active osd button | ||||
|   // hovered button | ||||
|   // | ||||
|     $_bg: if($c!=$osd_bg_color, transparentize($c, 0.3), | ||||
|                             lighten($osd_bg_color,3%)); | ||||
|  | ||||
|     color: white; | ||||
|     border-color: $osd_borders_color; | ||||
|     background-color: $_bg; | ||||
|     box-shadow: inset 0 1px lighten($osd_bg_color,20%); | ||||
|     text-shadow: 0 1px black; | ||||
|     icon-shadow: 0 1px black; | ||||
|  | ||||
|     color: $tc; | ||||
|     outline-color: transparentize($tc, 0.7); | ||||
|     border-color: if($c != $bg_color, _border_color($c), $borders_color); | ||||
|     border-bottom-color: if($c != $bg_color, _border_color($c, true), $alt_borders_color); | ||||
|     @if $variant == 'light' { | ||||
|       $button_fill: linear-gradient(to top, $c, lighten($c, 1%) 1px) !global; | ||||
|       @include _button_text_shadow($tc, lighten($c, 6%)); | ||||
|       @include _shadows(inset 0 1px _button_hilight_color(lighten($c, 6%)), $_button_edge, $_button_shadow); | ||||
|     } | ||||
|     @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 { | ||||
|   // | ||||
|   // 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 | ||||
|   // | ||||
|     $_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; | ||||
|     border-color: $osd_borders_color; | ||||
|     background-color: $selected_bg_color; | ||||
|     // This should be none, but it's creating some issues with borders, so to | ||||
|     // workaround it for now, use inset wich goes through a different code path. | ||||
|     // see https://bugzilla.gnome.org/show_bug.cgi?id=752934 | ||||
|     box-shadow: inset 0 0 black; | ||||
|     text-shadow: none; | ||||
|     icon-shadow: none; | ||||
|     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==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 | ||||
|   // | ||||
|     $_bg: transparentize(mix($insensitive_fg_color,$osd_bg_color,20%),0.3); | ||||
|  | ||||
|     color: $insensitive_fg_color; | ||||
|     color: $osd_insensitive_fg_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; | ||||
|     text-shadow: none; | ||||
|     icon-shadow: none; | ||||
|     -gtk-icon-shadow: none; | ||||
|   } | ||||
|  | ||||
|    | ||||
|   @else if $t==undecorated { | ||||
|   // | ||||
|   // reset | ||||
|   // | ||||
|     border-color: transparent; | ||||
|     background-color: transparent; | ||||
|     background-image: none; | ||||
|     $button_fill: none !global; | ||||
|     background-image: $button_fill; | ||||
|  | ||||
|     @include _shadows(inset 0 1px transparentize(white,1), | ||||
|                       $_blank_edge); | ||||
|     @include _shadows(inset 0 1px transparentize(white, 1), $_blank_edge); | ||||
|  | ||||
|     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_borders_color: darken($selected_bg_color, 20%); | ||||
| $borders_color: darken($bg_color,12%); | ||||
| $alt_borders_color: darken($bg_color,12%); | ||||
| $borders_edge: transparentize($fg_color, 0.9); | ||||
| $link_color: lighten($selected_bg_color,20%); | ||||
| $link_visited_color: lighten($selected_bg_color,10%); | ||||
| @@ -24,6 +25,7 @@ $osd_fg_color: #eeeeec; | ||||
| $osd_bg_color: #2e3436; | ||||
| $osd_borders_color: transparentize(black, 0.3); | ||||
| $osd_outer_borders_color: transparentize(white, 0.9); | ||||
| $shadow_color: rgba(0,0,0,0); | ||||
|  | ||||
| $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/_drawing"; | ||||
|   | ||||
| @@ -14,7 +14,7 @@ cogl_pango_pc = 'mutter-cogl-pango-' + mutter_api_version | ||||
| libmutter_pc = 'libmutter-' + mutter_api_version | ||||
|  | ||||
| croco_req = '>= 0.6.8' | ||||
| ecal_req = '>= 3.33.1' | ||||
| ecal_req = '>= 3.5.3' | ||||
| eds_req = '>= 3.17.2' | ||||
| gcr_req = '>= 3.7.5' | ||||
| gdesktop_req = '>= 3.7.90' | ||||
| @@ -73,7 +73,7 @@ else | ||||
| endif | ||||
|  | ||||
| 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) | ||||
| gcr_dep = dependency('gcr-base-3', version: gcr_req) | ||||
| gdk_x11_dep = dependency('gdk-x11-3.0') | ||||
|   | ||||
| @@ -295,13 +295,13 @@ create_client_for_source (ESource              *source, | ||||
| 		          CalendarSourceData   *source_data) | ||||
| { | ||||
|   ClientData *data; | ||||
|   EClient *client; | ||||
|   ECalClient *client; | ||||
|   GError *error = NULL; | ||||
|  | ||||
|   client = g_hash_table_lookup (source_data->clients, source); | ||||
|   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) | ||||
|     { | ||||
|       g_warning ("Could not load source '%s': %s", | ||||
| @@ -312,7 +312,7 @@ create_client_for_source (ESource              *source, | ||||
|     } | ||||
|  | ||||
|   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, | ||||
|                                             "backend-died", | ||||
|                                             G_CALLBACK (backend_died_cb), | ||||
|   | ||||
| @@ -102,120 +102,97 @@ typedef struct | ||||
| } CollectAppointmentsData; | ||||
|  | ||||
| static time_t | ||||
| get_time_from_property (ICalComponent         *icomp, | ||||
|                         ICalPropertyKind       prop_kind, | ||||
|                         ICalTime * (* get_prop_func) (ICalProperty *prop), | ||||
|                         ICalTimezone          *default_zone) | ||||
| get_time_from_property (icalcomponent         *ical, | ||||
|                         icalproperty_kind      prop_kind, | ||||
|                         struct icaltimetype (* get_prop_func) (const icalproperty *prop), | ||||
|                         icaltimezone          *default_zone) | ||||
| { | ||||
|   ICalProperty  *prop; | ||||
|   ICalTime      *itt; | ||||
|   ICalParameter *param; | ||||
|   ICalTimezone  *timezone = NULL; | ||||
|   time_t         retval; | ||||
|   icalproperty        *prop; | ||||
|   struct icaltimetype  ical_time; | ||||
|   icalparameter       *param; | ||||
|   icaltimezone        *timezone = NULL; | ||||
|  | ||||
|   prop = i_cal_component_get_first_property (icomp, prop_kind); | ||||
|   prop = icalcomponent_get_first_property (ical, prop_kind); | ||||
|   if (!prop) | ||||
|     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) | ||||
|     timezone = i_cal_timezone_get_builtin_timezone_from_tzid (i_cal_parameter_get_tzid (param)); | ||||
|   else if (i_cal_time_is_utc (itt)) | ||||
|     timezone = i_cal_timezone_get_utc_timezone (); | ||||
|     timezone = icaltimezone_get_builtin_timezone_from_tzid (icalparameter_get_tzid (param)); | ||||
|   else if (icaltime_is_utc (ical_time)) | ||||
|     timezone = icaltimezone_get_utc_timezone (); | ||||
|   else | ||||
|     timezone = default_zone; | ||||
|  | ||||
|   retval = i_cal_time_as_timet_with_zone (itt, timezone); | ||||
|  | ||||
|   g_clear_object (¶m); | ||||
|   g_clear_object (&prop); | ||||
|   g_clear_object (&itt); | ||||
|  | ||||
|   return retval; | ||||
|   return icaltime_as_timet_with_zone (ical_time, timezone); | ||||
| } | ||||
|  | ||||
| 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 * | ||||
| get_ical_summary (ICalComponent *icomp) | ||||
| get_ical_summary (icalcomponent *ical) | ||||
| { | ||||
|   ICalProperty *prop; | ||||
|   char         *retval; | ||||
|   icalproperty *prop; | ||||
|  | ||||
|   prop = i_cal_component_get_first_property (icomp, I_CAL_SUMMARY_PROPERTY); | ||||
|   prop = icalcomponent_get_first_property (ical, ICAL_SUMMARY_PROPERTY); | ||||
|   if (!prop) | ||||
|     return NULL; | ||||
|  | ||||
|   retval = g_strdup (i_cal_property_get_summary (prop)); | ||||
|  | ||||
|   g_object_unref (prop); | ||||
|  | ||||
|   return retval; | ||||
|   return g_strdup (icalproperty_get_summary (prop)); | ||||
| } | ||||
|  | ||||
| static char * | ||||
| get_ical_description (ICalComponent *icomp) | ||||
| get_ical_description (icalcomponent *ical) | ||||
| { | ||||
|   ICalProperty *prop; | ||||
|   char         *retval; | ||||
|   icalproperty *prop; | ||||
|  | ||||
|   prop = i_cal_component_get_first_property (icomp, I_CAL_DESCRIPTION_PROPERTY); | ||||
|   prop = icalcomponent_get_first_property (ical, ICAL_DESCRIPTION_PROPERTY); | ||||
|   if (!prop) | ||||
|     return NULL; | ||||
|  | ||||
|   retval = g_strdup (i_cal_property_get_description (prop)); | ||||
|  | ||||
|   g_object_unref (prop); | ||||
|  | ||||
|   return retval; | ||||
|   return g_strdup (icalproperty_get_description (prop)); | ||||
| } | ||||
|  | ||||
| static inline time_t | ||||
| get_ical_start_time (ICalComponent *icomp, | ||||
|                      ICalTimezone  *default_zone) | ||||
| get_ical_start_time (icalcomponent *ical, | ||||
|                      icaltimezone  *default_zone) | ||||
| { | ||||
|   return get_time_from_property (icomp, | ||||
|                                  I_CAL_DTSTART_PROPERTY, | ||||
|                                  i_cal_property_get_dtstart, | ||||
|   return get_time_from_property (ical, | ||||
|                                  ICAL_DTSTART_PROPERTY, | ||||
|                                  icalproperty_get_dtstart, | ||||
|                                  default_zone); | ||||
| } | ||||
|  | ||||
| static inline time_t | ||||
| get_ical_end_time (ICalComponent *icomp, | ||||
|                    ICalTimezone  *default_zone) | ||||
| get_ical_end_time (icalcomponent *ical, | ||||
|                    icaltimezone  *default_zone) | ||||
| { | ||||
|   return get_time_from_property (icomp, | ||||
|                                  I_CAL_DTEND_PROPERTY, | ||||
|                                  i_cal_property_get_dtend, | ||||
|   return get_time_from_property (ical, | ||||
|                                  ICAL_DTEND_PROPERTY, | ||||
|                                  icalproperty_get_dtend, | ||||
|                                  default_zone); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| get_ical_is_all_day (ICalComponent *icomp, | ||||
| get_ical_is_all_day (icalcomponent *ical, | ||||
|                      time_t         start_time, | ||||
|                      ICalTimezone  *default_zone) | ||||
|                      icaltimezone  *default_zone) | ||||
| { | ||||
|   ICalProperty *prop; | ||||
|   ICalDuration *duration; | ||||
|   ICalTime     *dtstart; | ||||
|   struct tm    *start_tm; | ||||
|   time_t        end_time; | ||||
|   gboolean      retval; | ||||
|   icalproperty            *prop; | ||||
|   struct tm               *start_tm; | ||||
|   time_t                   end_time; | ||||
|   struct icaldurationtype  duration; | ||||
|   struct icaltimetype      start_icaltime; | ||||
|  | ||||
|   dtstart = i_cal_component_get_dtstart (icomp); | ||||
|   if (dtstart && i_cal_time_is_date (dtstart)) | ||||
|     { | ||||
|       g_clear_object (&dtstart); | ||||
|       return TRUE; | ||||
|     } | ||||
|  | ||||
|   g_clear_object (&dtstart); | ||||
|   start_icaltime = icalcomponent_get_dtstart (ical); | ||||
|   if (start_icaltime.is_date) | ||||
|     return TRUE; | ||||
|  | ||||
|   start_tm = gmtime (&start_time); | ||||
|   if (start_tm->tm_sec  != 0 || | ||||
| @@ -223,40 +200,35 @@ get_ical_is_all_day (ICalComponent *icomp, | ||||
|       start_tm->tm_hour != 0) | ||||
|     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; | ||||
|  | ||||
|   prop = i_cal_component_get_first_property (icomp, I_CAL_DURATION_PROPERTY); | ||||
|   prop = icalcomponent_get_first_property (ical, ICAL_DURATION_PROPERTY); | ||||
|   if (!prop) | ||||
|     return FALSE; | ||||
|  | ||||
|   duration = i_cal_property_get_duration (prop); | ||||
|   duration = icalproperty_get_duration (prop); | ||||
|  | ||||
|   retval = duration && (i_cal_duration_as_int (duration) % 86400) == 0; | ||||
|  | ||||
|   g_clear_object (&duration); | ||||
|   g_clear_object (&prop); | ||||
|  | ||||
|   return retval; | ||||
|   return icaldurationtype_as_int (duration) % 86400 == 0; | ||||
| } | ||||
|  | ||||
| static inline time_t | ||||
| get_ical_due_time (ICalComponent *icomp, | ||||
|                    ICalTimezone  *default_zone) | ||||
| get_ical_due_time (icalcomponent *ical, | ||||
|                    icaltimezone  *default_zone) | ||||
| { | ||||
|   return get_time_from_property (icomp, | ||||
|                                  I_CAL_DUE_PROPERTY, | ||||
|                                  i_cal_property_get_due, | ||||
|   return get_time_from_property (ical, | ||||
|                                  ICAL_DUE_PROPERTY, | ||||
|                                  icalproperty_get_due, | ||||
|                                  default_zone); | ||||
| } | ||||
|  | ||||
| static inline time_t | ||||
| get_ical_completed_time (ICalComponent *icomp, | ||||
|                          ICalTimezone  *default_zone) | ||||
| get_ical_completed_time (icalcomponent *ical, | ||||
|                          icaltimezone  *default_zone) | ||||
| { | ||||
|   return get_time_from_property (icomp, | ||||
|                                  I_CAL_COMPLETED_PROPERTY, | ||||
|                                  i_cal_property_get_completed, | ||||
|   return get_time_from_property (ical, | ||||
|                                  ICAL_COMPLETED_PROPERTY, | ||||
|                                  icalproperty_get_completed, | ||||
|                                  default_zone); | ||||
| } | ||||
|  | ||||
| @@ -393,69 +365,67 @@ calendar_appointment_free (CalendarAppointment *appointment) | ||||
|  | ||||
| static void | ||||
| calendar_appointment_init (CalendarAppointment  *appointment, | ||||
|                            ICalComponent        *icomp, | ||||
|                            icalcomponent        *ical, | ||||
|                            ECalClient           *cal) | ||||
| { | ||||
|   ICalTimezone *default_zone; | ||||
|   icaltimezone *default_zone; | ||||
|   const char *source_id; | ||||
|  | ||||
|   source_id = e_source_get_uid (e_client_get_source (E_CLIENT (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->backend_name = get_source_backend_name (cal); | ||||
|   appointment->summary      = get_ical_summary (icomp); | ||||
|   appointment->description  = get_ical_description (icomp); | ||||
|   appointment->summary      = get_ical_summary (ical); | ||||
|   appointment->description  = get_ical_description (ical); | ||||
|   appointment->color_string = get_source_color (cal); | ||||
|   appointment->start_time   = get_ical_start_time (icomp, default_zone); | ||||
|   appointment->end_time     = get_ical_end_time (icomp, default_zone); | ||||
|   appointment->is_all_day   = get_ical_is_all_day (icomp, | ||||
|   appointment->start_time   = get_ical_start_time (ical, default_zone); | ||||
|   appointment->end_time     = get_ical_end_time (ical, default_zone); | ||||
|   appointment->is_all_day   = get_ical_is_all_day (ical, | ||||
|                                                    appointment->start_time, | ||||
|                                                    default_zone); | ||||
| } | ||||
|  | ||||
| static CalendarAppointment * | ||||
| calendar_appointment_new (ICalComponent        *icomp, | ||||
| calendar_appointment_new (icalcomponent        *ical, | ||||
|                           ECalClient           *cal) | ||||
| { | ||||
|   CalendarAppointment *appointment; | ||||
|  | ||||
|   appointment = g_new0 (CalendarAppointment, 1); | ||||
|  | ||||
|   calendar_appointment_init (appointment, icomp, cal); | ||||
|   calendar_appointment_init (appointment, ical, cal); | ||||
|   return appointment; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| generate_instances_cb (ICalComponent *icomp, | ||||
|                        ICalTime *instance_start, | ||||
|                        ICalTime *instance_end, | ||||
|                        gpointer user_data, | ||||
|                        GCancellable *cancellable, | ||||
|                        GError **error) | ||||
| generate_instances_cb (ECalComponent *comp, | ||||
|                        time_t         start, | ||||
|                        time_t         end, | ||||
|                        gpointer       data) | ||||
| { | ||||
|   ECalClient *cal = ((CollectAppointmentsData *)user_data)->client; | ||||
|   GHashTable *appointments = ((CollectAppointmentsData *)user_data)->appointments; | ||||
|   ECalClient *cal = ((CollectAppointmentsData *)data)->client; | ||||
|   GHashTable *appointments = ((CollectAppointmentsData *)data)->appointments; | ||||
|   CalendarAppointment *appointment; | ||||
|   CalendarOccurrence *occurrence; | ||||
|   ICalTimezone *default_zone; | ||||
|   const gchar *uid; | ||||
|   const char *uid; | ||||
|  | ||||
|   default_zone = e_cal_client_get_default_timezone (cal); | ||||
|   uid = i_cal_component_get_uid (icomp); | ||||
|   e_cal_component_get_uid (comp, &uid); | ||||
|   appointment = g_hash_table_lookup (appointments, uid); | ||||
|  | ||||
|   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); | ||||
|     } | ||||
|  | ||||
|   occurrence             = g_new0 (CalendarOccurrence, 1); | ||||
|   occurrence->start_time = i_cal_time_as_timet_with_zone (instance_start, default_zone); | ||||
|   occurrence->end_time   = i_cal_time_as_timet_with_zone (instance_end, default_zone); | ||||
|   occurrence->rid        = e_cal_util_component_get_recurid_as_string (icomp); | ||||
|   occurrence->start_time = start; | ||||
|   occurrence->end_time   = end; | ||||
|   occurrence->rid        = e_cal_component_get_recurid_as_string (comp); | ||||
|  | ||||
|   appointment->occurrences = g_slist_append (appointment->occurrences, occurrence); | ||||
|  | ||||
| @@ -472,7 +442,7 @@ struct _App | ||||
|   time_t since; | ||||
|   time_t until; | ||||
|  | ||||
|   ICalTimezone *zone; | ||||
|   icaltimezone *zone; | ||||
|  | ||||
|   CalendarSources *sources; | ||||
|   gulong sources_signal_id; | ||||
| @@ -498,9 +468,9 @@ app_update_timezone (App *app) | ||||
|   if (g_strcmp0 (location, app->timezone_location) != 0) | ||||
|     { | ||||
|       if (location == NULL) | ||||
|         app->zone = i_cal_timezone_get_utc_timezone (); | ||||
|         app->zone = icaltimezone_get_utc_timezone (); | ||||
|       else | ||||
|         app->zone = i_cal_timezone_get_builtin_timezone (location); | ||||
|         app->zone = icaltimezone_get_builtin_timezone (location); | ||||
|       g_free (app->timezone_location); | ||||
|       app->timezone_location = 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) | ||||
|     { | ||||
|       ICalComponent *icomp = l->data; | ||||
|       icalcomponent *ical = l->data; | ||||
|       const char *uid; | ||||
|  | ||||
|       uid = i_cal_component_get_uid (icomp); | ||||
|       uid = icalcomponent_get_uid (ical); | ||||
|  | ||||
|       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); | ||||
|   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", | ||||
|                since_iso8601, | ||||
| @@ -652,12 +622,21 @@ app_load_events (App *app) | ||||
|  | ||||
|       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.appointments = app->appointments; | ||||
|       e_cal_client_generate_instances_sync (cal, | ||||
|                                             app->since, | ||||
|                                             app->until, | ||||
|                                             NULL, | ||||
|                                             generate_instances_cb, | ||||
|                                             &data); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user