WordPress.org

Make WordPress Core

Ticket #26907: 26907.patch

File 26907.patch, 6.6 KB (added by GregRoss, 6 years ago)

Patch to add better mouse move detection in DFW mode.

  • src/wp-admin/includes/user.php

     
    9292
    9393        if ( $update ) {
    9494                $user->rich_editing = isset( $_POST['rich_editing'] ) && 'false' == $_POST['rich_editing'] ? 'false' : 'true';
     95                $user->dfw_mouse = isset( $_POST['dfw_mouse'] ) && 'true' == $_POST['dfw_mouse'] ? 'true' : 'false';
    9596                $user->admin_color = isset( $_POST['admin_color'] ) ? sanitize_text_field( $_POST['admin_color'] ) : 'fresh';
    9697                $user->show_admin_bar_front = isset( $_POST['admin_bar_front'] ) ? 'true' : 'false';
    9798        }
  • src/wp-admin/js/wp-fullscreen.js

     
    1111                uiScrollTop = 0,
    1212                transitionend = 'transitionend webkitTransitionEnd',
    1313                $body = $( document.body ),
    14                 $document = $( document );
     14                $document = $( document ),
     15                MouseInToolbar = false;
    1516
    1617        /**
    1718         * PubSub
     
    101102                        $body.addClass('wp-dfw-show-ui');
    102103                }
    103104
    104                 if ( hide === 'hide' ) {
     105                if ( hide === 'hide' || hide === 'peak' ) {
    105106                        uiTimer = setTimeout( _hideUI, 2000 );
    106107                }
    107108        };
     
    198199                        s.$dfwTitle = null;
    199200                }
    200201
     202                /*
     203                        Bind mouse/touch events to the document root, this usually catches events anywhere on screen
     204                        *except* within TinyMCE.
     205
     206                        To capture events within TinyMCE's iframe we also have to bind to the iframe that TinyMCE creates
     207                        for it's contents.
     208
     209                        For the mouse capture on the document we don't ru toggleUI as otherwise it will cancel out the
     210                        behaviour of keeping the toolbar visible when the pointer is inside of it.
     211                */
     212                var wpfs_capture = wp_fullscreen_mouse();
     213               
     214                if( wpfs_capture == true ) {
     215                        var fs_body = $(document);
     216                       
     217                        // Show/hide the ui when a touch event happens anywhere on screen.
     218                        fs_body.on( 'touchstart.wpdfw', function() {
     219                                toggleUI('show');
     220                        }).on( 'touchend', function() {
     221                                toggleUI('hide');
     222                        });
     223
     224                        // Show the ui when the mouse moves.
     225                        fs_body.on( 'mousemove.wpdfw', function() {
     226                                if( MouseInToolbar == false ) {
     227                                        toggleUI('peak');
     228                                }
     229                        });
     230
     231                        // Bind to the iframe, we don't need to check if we're in the toolbar as we can't be, we're in the iframe ;)
     232                        var content_ifr = document.getElementById('content_ifr');
     233                        if( content_ifr != null ) {
     234                                content_ifr.contentWindow.document.onmousemove = function() {
     235                                        toggleUI('peak');
     236                                }
     237                        }
     238                }
     239               
    201240                api.ui.fade( 'show', 'showing', 'shown' );
    202241        };
    203242
     
    210249                if ( ! s.visible )
    211250                        return;
    212251
     252                var wpfs_capture = wp_fullscreen_mouse();
     253               
     254                if( wpfs_capture == true ) {
     255                        // Clear out the mouse/touch events we setup when we enabled fullscreen.
     256                        var fs_body = $(document);
     257                        fs_body.off( 'mousemove.wpdfw' );
     258                        fs_body.off( 'touchstart.wpdfw' );
     259
     260                        // Clear out the iframe mouse event we setup when we enabled fullscreen.
     261                        var content_ifr = document.getElementById('content_ifr');
     262                        if( content_ifr != null ) {
     263                                content_ifr.contentWindow.document.onmousemove = null;
     264                        }
     265                }
     266               
    213267                api.ui.fade( 'hide', 'hiding', 'hidden' );
    214268        };
    215269
     
    510564                                }
    511565                        });
    512566
     567                        // Show/hide the toolbar when entering/leaving it on the screen.
    513568                        toolbar.on( 'mouseenter', function() {
     569                                MouseInToolbar = true;
    514570                                toggleUI('show');
    515571                        }).on( 'mouseleave', function() {
     572                                MouseInToolbar = false;
    516573                                toggleUI('hide');
    517574                        });
    518 
     575                       
    519576                        // Bind buttons
    520577                        $('#wp-fullscreen-buttons').on( 'click.wp-fullscreen', 'button', function( event ) {
    521578                                var command = event.currentTarget.id ? event.currentTarget.id.substr(6) : null;
  • src/wp-admin/user-edit.php

     
    246246                <th scope="row"><?php _e('Visual Editor')?></th>
    247247                <td><label for="rich_editing"><input name="rich_editing" type="checkbox" id="rich_editing" value="false" <?php if ( ! empty( $profileuser->rich_editing ) ) checked( 'false', $profileuser->rich_editing ); ?> /> <?php _e( 'Disable the visual editor when writing' ); ?></label></td>
    248248        </tr>
     249        <tr>
     250                <th scope="row"><?php _e('DFW Mouse')?></th>
     251                <td><label for="dfw_mouse"><input name="dfw_mouse" type="checkbox" id="dfw_mouse" value="true" <?php if ( ! empty( $profileuser->dfw_mouse ) ) checked( 'true', $profileuser->dfw_mouse ); ?> /> <?php _e( 'Disable showing the toolbar in Distraction Free Writing mode unless the mouse is inside the toolbar' ); ?></label></td>
     252        </tr>
    249253<?php endif; ?>
    250254<?php if ( count($_wp_admin_css_colors) > 1 && has_action('admin_color_scheme_picker') ) : ?>
    251255<tr>
  • src/wp-includes/class-wp-editor.php

     
    836836                                }
    837837                        }
    838838                }());
     839               
     840                function wp_fullscreen_mouse() {
     841                        return <?php $dfw_mouse = get_user_option( 'dfw_mouse' ); if( $dfw_mouse === false ) { echo 'true'; } else { echo $dfw_mouse; }?>;
     842                }
    839843                </script>
    840844                <?php
    841845
     
    893897                                continue;
    894898                        }
    895899
    896                         $onclick = ! empty( $args['onclick'] ) ? ' onclick="' . $args['onclick'] . '"' : '';
     900                        if( true == array_key_exists( 'customhtml', $args ) ) {
     901                                echo $args['customhtml'];
     902                        }
     903                        else {
     904                       
     905                                $onclick = ! empty( $args['onclick'] ) ? ' onclick="' . $args['onclick'] . '"' : '';
    897906                        ?>
    898907
    899908                        <div class="mce-widget mce-btn<?php if ( $args['both'] ) { ?> wp-fullscreen-both<?php } ?>">
     
    902911                        </button>
    903912                        </div>
    904913                        <?php
     914                        }
    905915                }
    906916
    907917                ?>
  • src/wp-includes/user.php

     
    16071607        if ( empty($rich_editing) )
    16081608                $rich_editing = 'true';
    16091609
     1610        if ( empty($dfw_mouse) )
     1611                $dfw_mouse = 'false';
     1612               
    16101613        if ( empty($comment_shortcuts) )
    16111614                $comment_shortcuts = 'false';
    16121615
     
    17801783 * @return array
    17811784 */
    17821785function _get_additional_user_keys( $user ) {
    1783         $keys = array( 'first_name', 'last_name', 'nickname', 'description', 'rich_editing', 'comment_shortcuts', 'admin_color', 'use_ssl', 'show_admin_bar_front' );
     1786        $keys = array( 'first_name', 'last_name', 'nickname', 'description', 'rich_editing', 'comment_shortcuts', 'admin_color', 'use_ssl', 'show_admin_bar_front', 'dfw_mouse' );
    17841787        return array_merge( $keys, array_keys( wp_get_user_contact_methods( $user ) ) );
    17851788}
    17861789